你知道,在c中,windows库中的WaitForMultipleObjects函数是以对象数组的形式获取参数。但在我的家庭作业中,助手希望将所有线程放在一个堆栈中,而不是放在一个数组中,我如何在堆栈中使用这个函数?
发布于 2011-11-12 19:22:14
您只能使用数组调用此函数。这不是你可以控制的事情。因此,您需要使用能够将其内容公开为数组的堆栈。或者能够像堆栈一样操作的数组。
然而,将堆栈容器用于线程是完全合理的。为什么你的家庭作业助手想要使用堆栈?
发布于 2011-11-12 19:31:38
您的意思是WaitForMultipleObjects的entry对象的顺序很重要吗?
对于这个函数,条目对象的排序序列和它们的随机序列没有区别。
此外,在许多实现中,堆栈是一个数组,您可以将该数组的指针传递给此函数。
发布于 2011-11-12 21:56:25
如果有一个固定的线程完成顺序,而您想要等待它们一个接一个地完成,那么堆栈就是有意义的。
假设你有3个线程,它们的句柄存储在一个数组中:
HANDLE handles[3];现在,如果执行WaitForMultipleObjects(3, handles, FALSE /* bWaitAll */, INFINITE),它将在第一个线程完成时返回。如果您再次使用这些相同的参数调用WaitForMultipleObjects(),它将不会等待下一个线程完成。它会失败的。要等待剩余的线程,您必须从数组中排除已完成的线程的句柄。
如果线程以固定的顺序2,1,0完成,你可以像这样等待:
WaitForMultipleObjects(3, handles, FALSE /* bWaitAll */, INFINITE);
WaitForMultipleObjects(2, handles, FALSE /* bWaitAll */, INFINITE);
WaitForMultipleObjects(1, handles, FALSE /* bWaitAll */, INFINITE);就像在堆栈上调用WaitForMultipleObjects()一样,每次调用WaitForMultipleObjects()后都会弹出一个句柄。
https://stackoverflow.com/questions/8104103
复制相似问题