繁体   English   中英

std::async 不产生线程

[英]std::async not spawning a thread

我正在尝试使用 std::async 并行处理数据,但由于未知原因没有创建线程也没有执行代码,代码如下

std::vector<std::future<int>> threads;

for (DWORD offset = 0; offset < 10; offset++) {
    threads.push_back(std::async([](std::vector<unsigned int> sig, DWORD address, DWORD size)->int { 
        // Sleep is never called
        Sleep(5);
        // Only for test purposes anyway
        return 1;
        }, signature, 1, 1));
}

for (auto& thread : threads) {
    // Hangs here
    DWORD result = thread.get();

    if (result) {
        return (void*)result;
    }
}

为了简单起见,我删除了大部分无用的代码,只留下与问题相关的部分。

我尝试调试代码并在 Sleep api 中设置断点以检查是否正在执行任何操作,但没有任何反应; 此外,我似乎无法在进程中找到任何新线程,如果我调用 thread.wait()/thread.get(),代码就会挂起。

代码是用visual studio 2019社区用/std:c++17编译的

该函数是从 DllMain 调用的,内核对象被创建和调度但从未执行,因为它等待 dllmain 完成加载但它从未完成,因为它正在等待线程首先执行。

这个问题是由 raymond chen 在他的博客中回答的,我之前遇到过,但发生的事情从来都不明显,在一个干净的项目上测试代码让我意识到代码工作得很好,让我意识到其他事情是导致线程不产生/运行。

tl; dr:在 DllMain 期间创建线程会暂停它们的执行,直到 dllmain 完成运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM