Pri*_*tic 8 c++ qt multithreading qml
我正在尝试确定如何从QML中为生活在另一个线程中的QObject调用QObject槽或Q_INVOKABLE方法,以及它是否安全.
假设有一个MainThread和ThreadA.QObjectA位于ThreadA中.QML引擎/ gui/Everys都存在于MainThread中.我将QObjectA暴露给QML引擎
declarativeView->setContextProperty("someObj",ObjectA)
Run Code Online (Sandbox Code Playgroud)
现在在QML文件中,我打电话
someObj.someMethod();
Run Code Online (Sandbox Code Playgroud)
其中someMethod是一个槽或Q_INVOKABLE.我想知道哪个线程实际执行该函数.如果它是MainThread,那将是一件坏事,并且在线程之间调用这样的方法会很危险.如果它是由ThreadA执行的,那么一切都会好的.
基于此文档:http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html,我假设QMetaObject ::的InvokeMethod()用于调用QObject的功能.该文档(http://doc.qt.nokia.com/4.7-snapshot/qmetaobject.html#invokeMethod),显示有可用的不同的连接类型,就像使用Qt信号和槽.
我想知道,如果Qt的QML引擎从QML跨线程调用C++方法时自动地选择合适的类型的情况,如果是这样,要求住在从QML其他线程对象的方法是可以接受的做法.
Pav*_*pov -1
QML 逻辑是事件驱动的,所有调用都是 JavaScript 函数的一部分。JS 函数可以是事件处理程序(例如 UI 事件处理程序),或者如果将它们包装在 QScript 对象中,则可以在 C++ 代码中的某个位置调用它们。您也可以在 JavaScript WorkerTherad 中调用它们。这就是为什么只有您可以提供答案, someObj.someMethod() 调用在哪里发生。
| 归档时间: |
|
| 查看次数: |
2583 次 |
| 最近记录: |