gpt4 book ai didi

winapi - 在线程中,如果设置为INFINITE,则WaitForMultipleObjects永远不会返回

转载 作者:行者123 更新时间:2023-12-03 13:15:44 26 4
gpt4 key购买 nike

假设我有三个线程句柄

HandleList[0] = hThread1;
HandleList[1] = hThread2;
HandleList[2] = hThread3;
/*All the above are of type HANDLE*/

在关闭应用程序之前,我希望线程完成其任务。所以我想让应用程序等到线程完成。

所以我会
WaitForMultipleObjects(3, HandleList, TRUE, INFINITE );

这样我就可以创建线程,完成其任务。但是,无论所有线程完成其任务如何,在调用WaitForMultileObjects之后,控制都永远不会移至下一行。

如果我使用了几秒钟而不是INFINITE,那么它将在那几秒钟后到达下一行,而与线程是否完成其任务无关。
WaitForMultipleObjects(3, HandleList, TRUE, 10000 );

我的问题是,我不能坚持几秒钟,因为我不确定线程​​是否会在给定的时间内完成其任务。

用简单的文字列出我的问题,
在关闭我的应用程序之前,我希望所有线程都可以完成任务。如何使用WaitForMultipleObjects API实现它?

编辑:
根据MSDN ..

dw毫秒
[in]超时间隔,以毫秒为单位。
  • 即使不满足bWaitAll参数指定的条件,如果间隔过去,该函数也会返回。
  • 如果dwMilliseconds为零,则该函数测试指定对象的状态并立即返回。
  • 如果dwMilliseconds为INFINITE,则函数的超时间隔永远不会超过
  • 最佳答案

    简单的答案是,您无法使用WaitForMultipleObjects 实现此目标。

    这里的问题是此函数不是问题所在,它正在准确地执行应该执行的操作,它等待线程完成。

    这里的问题是,一个或多个线程永远不会完成

    就是是您需要解决的问题。为什么线程没有完成?

    他们陷入僵局了吗?他们是不是在不停地循环运行?

    关于winapi - 在线程中,如果设置为INFINITE,则WaitForMultipleObjects永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3005318/

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