场景举例:
- 没有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_P