我写了一个库(DLL)。Java 代码将我的 DLL 与 JNA 一起使用。在库中,我通过 QThread 派生类中的“new”创建 Qtimer。
但是,我有以下错误:
ERROR: QTimer can only be used with threads started with QThread
在没有 QApplication/QCoreApplication 的情况下,我应该如何正确使用 QTimer 从非 Qt 线程调用?
我写了一个库(DLL)。Java 代码将我的 DLL 与 JNA 一起使用。在库中,我通过 QThread 派生类中的“new”创建 Qtimer。
但是,我有以下错误:
ERROR: QTimer can only be used with threads started with QThread
在没有 QApplication/QCoreApplication 的情况下,我应该如何正确使用 QTimer 从非 Qt 线程调用?
不幸的是,据我所知,QTimer 需要 QCoreApplication 。而且 QCoreApplication 必须在创建我看到的第一个 QObject 的线程中实例化。我所做的是实例化 QCoreApplication 一个使用QtConcurrent::run产生的新线程,并在那里实例化我的 QObjects。我在这里报告了一个简单的例子。QTimer 现在似乎工作正常。
看看QBasicTimer
。我不是 100% 确定这是否会起作用,但至少文档根本没有提到QThread
s 和事件循环(与QTimer
类的文档相反)。
缺点是它有点复杂(它调用timerEvent()
你的重新实现QObject
,没有信号槽连接),但如果它是真的,你可以在没有事件循环的情况下使用它。