【发布时间】:2014-05-02 11:58:05
【问题描述】:
在互联网上进行了长时间的搜索后,我没有找到任何合理的解决方案来解决我的问题,那就是:
我有一个按需记录用户手指移动的应用程序,(当用户按下 r 时开始记录,当用户按下 s 时停止记录,
到目前为止,我的应用程序都在控制台上,因此它与跳跃动作完美配合, 现在我们决定将应用程序迁移到基于 GUI 的应用程序,并且我们选择了 QT 平台,我们将 GUI 与我们的解决方案集成在一起,我们放置了两个按钮来代替按键,并连接事件。 真正的问题开始于我们想要查看跳跃侦听器的 onFrame 回调捕获的内容,并且自从执行 QT 的主 GUI 以来,我们已经注意到跳跃的回调有些阻塞或只是没有获得 cpu 时间(我不知道真正的问题),我们尝试了几种解决方案,例如使用从 QObject 继承的包装类和 从那里开始一个线程,但它似乎没有任何影响。
这里是main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
LeapClass::QLeapLis * smp = LeapClass::QLeapLis::get_instance();
QThread * th = smp->thread();
//smp->moveToThread(th);
th->start(QThread::HighPriority);
w.show();
return a.exec();
}
这里的 QLeapLis 是 Wrapper 类,它有一个启动设备的 run 方法, 但仍然注意到发生,我非常接近放弃 QT。
如果有人知道如何将这两者联系起来,我们将不胜感激
非常感谢。
【问题讨论】:
-
一如既往:显示
QLeapLis的完整代码。 -
您拥有的整个线程毫无意义:
smp对象已经在其线程中(GUI 线程),并且该线程已经启动(main在其中运行!)。所以尝试启动一个已经在运行的线程,或者将一个对象移动到它已经在其中的线程 - 有什么意义? -
Leap 的
Controller对象已经是多线程的,所以你不需要做任何特别的事情,真的,除了意识到你可能拥有的Listener类在另一个线程中调用并且只能使用线程安全的 Qt API。它应该只是发布事件和/或发送信号,因为它们都是线程安全的。
标签: c++ multithreading qt leap-motion