C++ 如何在C+中启动线程而不等待响应+;?

C++ 如何在C+中启动线程而不等待响应+;?,c++,windows,multithreading,visual-c++,handle,C++,Windows,Multithreading,Visual C++,Handle,for循环中有一个CreateThread()调用,我希望所有线程一个接一个地启动,每个线程将数据写入一个对象 `$while (ii != mapOServs.end()) { Array_of_Thread_Handles[i] = CreateThread(NULL,0,MyThread, &args[i] , 0 , NULL); } 但是线程只有在命中WaitForMultipleObjects或WaitForSingleObject时才会启动

for循环中有一个CreateThread()调用,我希望所有线程一个接一个地启动,每个线程将数据写入一个对象

      `$while (ii != mapOServs.end())
{
      Array_of_Thread_Handles[i] = CreateThread(NULL,0,MyThread, &args[i] , 0 , NULL);
    }
但是线程只有在命中WaitForMultipleObjects或WaitForSingleObject时才会启动

如何让所有线程一个接一个地运行而不等待响应


另外,最好使用什么对象,以便不同线程可以同时修改它。

实际上,所有线程都会立即启动。只要正确同步对该结构的访问,就可以从线程写入任何数据结构。

线程确实立即“启动”——Windows将创建必要的内部结构、分配堆栈等,并将它们添加到计划程序的运行列表中。但是,它们不一定会立即安排


特别是,执行启动的线程可能会一直运行,直到用完它的时间片。如果运行的线程数超过处理器核心数(包括其他进程中的线程数),那么新线程可能暂时无法在处理器上调度,执行启动的线程可能会执行一个同步调用,例如
WaitForSingleObject
,然后它们中的任何一个都没有机会执行任何工作。

在调试时,您似乎被卡住了。当您跳过
CreateThread
时,它可能不会立即创建并运行线程,因为您正在调试线程。
请记住,在主动调试代码时,只允许一个线程运行,所有其他线程保持挂起状态。当您点击F10或F11时,调试器会让debuggee运行,这最终会要求操作系统运行要执行的进程/线程。我可能会添加更多内容,但您的问题需要进一步澄清。

它们会启动,但实际上可能不会在CreateThread函数之后直接开始运行,因为任务调度程序可以保持主线程运行,并且只在一段时间后运行线程。您是对的,我一直在调试中。我想知道为什么在调试一个线程时,其他线程没有运行并显示它们的消息。