在一个for循环中有一个CreateThread()调用,我希望所有的线程依次启动,每个线程向一个对象写入数据。
`$while (ii != mapOServs.end())
{
Array_of_Thread_Handles[i] = CreateThread(NULL,0,MyThread, &args[i] , 0 , NULL);
}
但线程只有在遇到 WaitForMultipleObjects 或 WaitForSingleObject 时才会启动。
如何在不等待响应的情况下让所有线程依次运行?
另外,最好使用什么对象,以便它可以同时被不同的线程修改。
最佳答案
线程确实是立即“启动”的——Windows 将创建必要的内部结构、分配堆栈等,并将它们添加到调度程序的运行列表中。但是,它们不一定会立即安排。
特别是,执行启动的线程可能会继续运行,直到用完它的时间片。如果您运行的线程多于处理器内核(包括其他进程中的线程),那么您的新线程很可能暂时不会在处理器上进行调度,并且执行启动的线程可能会执行同步调用,例如 WaitForSingleObject
在他们中的任何一个有机会做任何工作之前。
关于c++ - 如何在不等待 C++ 响应的情况下启动线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686074/