小编Dav*_*ijn的帖子

qml c++ 多线程属性绑定

我正在创建一个模块化应用程序。它有一个Core, 和一些模块,其中有一个 gui 模块。这些模块可以通过命令行启动:

myApp gui=qml=qmlFile.qml connection=serial=/dev/ttyS1
Run Code Online (Sandbox Code Playgroud)

将使用一个(也可以使用多个)gui 和一个串行连接启动应用程序。总是有一个Router对象来处理连接。Guis 是由一个看起来像这样的类加载的:

class Gui :QObject{
  Core* core;
  public:
  QQmlApplicationEngine engine;
  public slots:
  void start(){
    engine.load("qrc:/gui/from/command/line.qml");
  }
Run Code Online (Sandbox Code Playgroud)

在 gui 中,我有一个很好的 qml 称为ConnectionController{}添加/删除连接的简单方法。但这只是同类中的第一个:最终每个模块都应该有一个 qml 组件来控制它。

这一切正常,但现在我正在尝试添加多个线程。我想要一个RouterThread和一个GuiThread。这本身只是将Router(由Core)的创建更改为:

m_router = new Router(this /*not as parent, just as pointer*/);
m_router->moveToThread(&routerThread);
Run Code Online (Sandbox Code Playgroud)

(gui 现在仍然存在于主线程中)在此之后,除了 qml 属性绑定之外,一切仍然正常。

QQmlEngine: Illegal attempt to connect to SerialConnection(0x7f58d00013a0) that is in a different thread than the QML engine
Run Code Online (Sandbox Code Playgroud)

因为Gui …

c++ qt multithreading qml

5
推荐指数
1
解决办法
4071
查看次数

bash将管道中的值返回bash

我们有一个脚本,带有返回码.例如

#!/bin/bash
exit 42
Run Code Online (Sandbox Code Playgroud)

哪个工作正常:

$ ./script ; echo $?
42
Run Code Online (Sandbox Code Playgroud)

但如果我去:

$ bash << EOF
./script ; echo $?
EOF
0
Run Code Online (Sandbox Code Playgroud)

所以它打印0,而人们会期望它仍然打印42

bash pipe

0
推荐指数
1
解决办法
101
查看次数

标签 统计

bash ×1

c++ ×1

multithreading ×1

pipe ×1

qml ×1

qt ×1