共享库加载后,新线程挂起

时间:2019-02-15 02:57:44

标签: c++ multithreading qt

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!";
}

感谢大家的建议:)

0 个答案:

没有答案