场景举例:
- 没有main()启动主线程,但希望用Qt的类和信号槽
- 不希望app.exec()阻塞主线程
比如我最近在制作一个Windows SDK,封装成dll,只暴露两个简单全局函数作为接口:
extern "C" __declspec(dllexport) int start(const char*, const char*);
extern "C" __declspec(dllexport) void stop();
没有主事件循环,我就无法使用信号槽机制,我甚至无法正常使用QTimer、QProcess等等
那如何启动主事件循环呢?
QCoreApplication app(argc, argv);
...
app.exec();
但我没有main()入口,怎么办?
线程中启动主事件循环就可以——主事件循环不一定要在主线程中启动哦
注意不能使用QThread,因为QThread的正常使用也依赖事件循环
使用std::thread
我的实现:
1、定义全局对象
static MyObject* m = nullptr;
2、定义启动参数对象
struct InputArgs{
int argc;
char **argv;
};
3、获取启动参数——调用程序的可执行文件路径
WCHAR exePath[MAX_PATH+1];
String exeFullPath;
DWORD len = GetModuleFIleNameW(nullptr, exePath, MAX_PATH); // #include
Qt线程中启动主事件循环的方法

在没有main()入口且不希望阻塞主线程的情况下,如何在Qt中使用信号槽及QTimer等类?本文通过实例展示了如何在Windows SDK的dll中,利用std::thread在其他线程中启动QCoreApplication的主事件循环,详细解析了启动过程及退出事件循环的注意事项。
最低0.47元/天 解锁文章
1925

被折叠的 条评论
为什么被折叠?



