如何将任务委托给主线程并等待其执行完成?

Posted

技术标签:

【中文标题】如何将任务委托给主线程并等待其执行完成?【英文标题】:How to delegate a task to main thread and wait for it's execution to complete? 【发布时间】:2011-10-02 07:28:17 【问题描述】:

我有一个 Borland C++ 项目,我在其中看到一个 synchronize() 方法,工作线程可以使用该方法将任务委托给主线程并等待任务完成。在 C# 中,有一个类似的 Control.Invoke() 方法。在 Visual Studio 中为 GUI 和控制台应用程序使用 C++ 时是否有类似的东西? SendMessage() 出现在我的脑海中,但这是否相当于上述两个?

【问题讨论】:

请注意,这不是关于 C++,而是关于操作系统和系统特定的库。 C++ 没有任何标准化的多任务支持(还...) 【参考方案1】:

SendMessage 适用于 GUI 应用程序,其中主线程有一个消息队列。对于控制台应用程序,没有通用方法。您需要首先决定主线程应如何处理此类请求。如果 Console 应用程序的主线程有消息队列,SendMessage 也可以。您可以考虑其他方式,例如,使用事件,每一次都取决于主应用程序线程的行为及其处理来自其他线程的请求的能力。

【讨论】:

SendMessage 接受 HWND,因此它不适用于(纯)控制台应用程序。您可以为此使用PostThreadMessage,但您必须自己处理等待 - PostThreadMessage 是异步的。 @eran,感谢 Alex 和 eran 的回复。

以上是关于如何将任务委托给主线程并等待其执行完成?的主要内容,如果未能解决你的问题,请参考以下文章

HTML5(四)——Web Workers

QT多线程问题:子线程中的变量如何传递给主线程?

java 子线程如何返回结果给主线程

qt子线程如何传输数据给主线程

java 子线程 回调 主线程

锁系列:共享锁CountDownLatch,实现主线程等待子线程任务完成后,再继续执行。