DESC:
这与我之前的问题有关:widget not show up after lib loaded
我发现不仅不显示小部件,在新创建的线程中的代码似乎根本没有运行。
在加载lib时,我希望它在其中运行一些与Qt相关的逻辑 新创建的线程。但是新线程似乎挂起了。
这是我的代码(共享库):
class LibExecutor {
public:
LibExecutor()
{
std::cout << "before thread create" << std::endl;
std::thread t([]() {
std::cout << "thread is running" << std::endl;
});
t.join();
std::cout << "thread ended" << std::endl;
}
};
static LibExecutor libExecutor;
当主机应用程序加载此lib,程序时,线程主体中的输出行未显示 块。
此外,使用dllMain的C样式黑客程序也阻止了新线程。 :(,我知道在dllMain中创建线程很糟糕,仅测试。:p
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
std::thread t([]() {
std::cout << "thread running" << std::endl;
});
t.join();
}
return true;
}
这是我如何使用Qt的QLibrary对其进行测试:
QLibrary lib("F:/path_to_dll_file.dll");
qDebug() << "current thread ID: " << QThread::currentThreadId();
if (lib.load()) {
qDebug() << "load ok!";
} else {
qDebug() << "load error!";
}
感谢大家的建议:)