Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何异步运行整个QApplication?_C++_Multithreading_Qt_Asynchronous_Concurrency - Fatal编程技术网

C++ 如何异步运行整个QApplication?

C++ 如何异步运行整个QApplication?,c++,multithreading,qt,asynchronous,concurrency,C++,Multithreading,Qt,Asynchronous,Concurrency,我正在尝试以库的形式运行修改过的qt程序。我需要它不要妨碍主要的执行 所以我想做的是运行QApplication并开始执行主应用程序。我怎样才能做到这一点 我的第一个想法是在一个单独的线程中运行它 void MyClass::execute() { someClass = someClass::instance(); std::thread t1(&MyClass::startApp, this); someClass->someFunction();

我正在尝试以库的形式运行修改过的qt程序。我需要它不要妨碍主要的执行

所以我想做的是运行QApplication并开始执行主应用程序。我怎样才能做到这一点

我的第一个想法是在一个单独的线程中运行它

void MyClass::execute() {
    someClass = someClass::instance();
    std::thread t1(&MyClass::startApp, this);
    someClass->someFunction();
    someClass->doMoreStuff();
}
void MyClass::startApp() {
    QApplication app(argc, argv);
    app.exec();
    QCoreApplication::quit();
}
但这会导致调用“\uu invoke”的
不明确
错误。虽然我不知道为什么/where
\uu invoke
被覆盖,以及如何处理此错误:(


那么,我如何才能确保QApplication不会阻止主执行呢?

设计模式完全错误,QApplication和QCoreApplication不应该在一个应用程序中相乘。例如,您应该做的是将自己的类设置为:

class LibraryCore: public QObject {
}

并在将来的库源代码中将QApplication替换为此类。然后,您应该在LibraryCore中实现所需的方法(应用程序内部使用的方法)让它们正常工作..

谢谢你的回答。因此你建议不要使用QApplication。当我尝试不使用QApplication时,我会收到几个错误,告诉我如何实例化QApplication。你可以更详细地解释一下你的计划吗?你是否计划将Qt应用程序移植到一个库中,以便与非Qt项目一起使用?这看起来并不正确这也是一个好主意……是的,这就是我计划要做的。我想在我的应用程序中使用PhantomJS。我需要访问PhantomJS网页。那么,我仍然建议按照我建议的方式,让你的应用程序基于Qt。问题是,Qt它不是一个真正的支持库,而是一个假设需要开发的框架Moment遵循一些规则。哦…好的,谢谢。我的计划是在黑盒中安装PhantomJS,并通过一个简单的界面与之交互,提供所需的功能。我仍然没有真正理解你的答案的意思,以及这是如何解决我的问题的。