【问题标题】:How will I know that thread has completed its task?我如何知道该线程已完成其任务?
【发布时间】:2012-03-06 14:31:25
【问题描述】:

举个例子:-

我使用CreateThread Api 创建了线程pThread,它将执行一些任务,比如vSampleTask

我怎么知道 pThread 已经完成了它的任务?

谢谢

【问题讨论】:

    标签: windows winapi operating-system


    【解决方案1】:

    您可以使用WaitForSingleObject 或其他等待函数之一等待线程句柄。例如,您可以使用MsgWaitForMultipleObjects 让您的等待被输入消息打断。当线程执行完成时,线程句柄会发出信号。

    作为替代方法,您可以通过调用GetExitCodeThread 来检查线程的状态。如果线程仍然忙,这将返回FALSE,如果它已完成,则返回TRUE。如果线程已经完成,那么也会返回退出代码。

    如果一个线程需要等待另一个线程完成,那么您应该使用等待函数而不是调用GetExitCodeThread 的繁忙轮询循环。繁忙的循环和轮询只会消耗不必要的 CPU(和电源)。等待函数允许等待线程空闲。

    【讨论】:

    • 感谢大卫的回复 :)
    【解决方案2】:

    你可以通过GetExitCodeThread询问线程的状态。

    【讨论】:

    • 非常感谢。我明白这一点。我还有一个疑问,在任务完成后并使用“GetExitCodeThread”检查该线程是否已完成其任务。我需要调用 ExitThread Api 来结束线程还是自动完成?
    • 在您的 Google 搜索栏中键入“GetExitCodeThread”,单击第一个非广告链接并从 MS 本身查找规范。在那里你会找到更完整的答案。
    • 那么程序员会在什么情况下使用ExitThread Api呢?程序员强行要结束线程时使用ExitThread吗?
    • 没错。您可以将其视为线程而不是循环中的break
    • 线程以两种方式之一自行终止。调用ExitThread 传递退出代码。或return 线程过程的退出代码。 ExitThread 在线程过程调用其他过程时很有用。 A.H. 与break 的类比非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2010-10-16
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多