gpt4 book ai didi

c++ - 为什么 Main 函数上的 Sleep() 会停止所有线程?

转载 作者:太空宇宙 更新时间:2023-11-04 15:55:32 26 4
gpt4 key购买 nike

为什么 Sleep() 会停止所有创建的线程?我想创建一个线程,但让 Main 函数处于 sleep 状态,直到线程结束。

bool _finished = false;

void testcount(void *p){
int i = 0;
while(i<=30){
i++;
std::cout<<i<<"\n";
Sleep(1000);
}
_finished = true;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){
HANDLE test = NULL;
test = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)testcount, NULL, NULL, NULL);
if(test)
std::cout<<"test thread created";
CloseHandle(test);

while(!_finished)
Sleep(1000);

return true;
}

我现在正在尝试这样,但程序永远不会完成,因为 whileSleep 停止了线程。当线程未完成时,我不想在 Main 上返回任何内容。有什么解决办法吗?

最佳答案

  1. DllMain 的调用由 Win32 序列化。

  2. 所有新线程都通过调用 DllMain(带有线程附加标志)开始,并将调用传递给 CreateThread 的方法。

因此您的线程正在等待调用 DllMain,这在您的第一个线程离开 DllMain 之前不会发生。

正如评论者 John Sheridan 所说 Raymond Chen's blog post from 2007是一个很好的解释。

附言。对于正确的 C/C++ 库初始化,您应该使用 _beginthread or _beginthreadex而不是直接CreateThread

关于c++ - 为什么 Main 函数上的 Sleep() 会停止所有线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58764954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com