首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程间通信(工作线程)

线程间通信(工作线程)
EN

Stack Overflow用户
提问于 2010-06-28 16:31:54
回答 4查看 7.8K关注 0票数 1

我使用CreateThread windows创建了两个线程A&B。我试图把数据从线程A发送到B。

我知道我可以使用事件对象,并使用"WaitForSingleObject“方法在另一个事件对象中等待事件对象。这个事件所做的一切只是向线程发出信号。就是这样!,但是我怎么能发送数据。,我也不想让线程B等到线程A信号。它有自己的工作要做。我不能让它等待。

我找不到允许我通过线程ID或返回句柄向工作线程和主线程发送数据的Windows函数。我不想在我的项目中引入MFC依赖项,并且希望听到关于其他人在这种情况下会或已经做的任何建议。提前感谢您的帮助!

EN

回答 4

Stack Overflow用户

发布于 2010-06-28 16:57:51

首先,您应该记住,Windows为您提供了许多处理线程的机制:I/O完成端口旧线程池新线程池。取决于您正在做的事情,它们中的任何一个都可能对您的目的有用。

至于“发送”数据从一个线程到另一个线程,您有两个选择。Windows消息队列是线程安全的,一个线程(即使它没有窗口)可以有一个消息队列,您可以将消息发送到使用PostThreadMessage

我还在另一个答案中发布了线程安全队列的代码。

至于让线程继续执行,但是在发生更改时请注意,典型的方法是让它调用超时值为0的WaitForSingleObject,然后检查返回值--如果是WAIT_OBJECT_0,事件(或其他什么)已经设置,因此它需要注意更改。如果是WAIT_TIMEOUT,则没有任何更改,并且可以继续执行。无论哪种方式,WaitForSingleObject都会立即返回。

票数 4
EN

Stack Overflow用户

发布于 2010-06-28 16:35:36

由于这两个线程处于相同的进程中(至少听起来是这样的),所以没有必要“发送”数据。他们可以共享它(例如,一个简单的全局变量)。您确实需要通过事件、信号量、互斥对象等同步访问它。

取决于你在做什么,它可以非常简单。

代码语言:javascript
复制
Thread1Func() {
  Set some global data
  Signal semaphore to indicate it is available
}

Thread2Func() {
  WaitForSingleObject to check/wait if data is available
  use the data
}
票数 1
EN

Stack Overflow用户

发布于 2010-06-28 18:00:15

如果您关注最小化Windows依赖关系,并假设您正在使用C++进行编码,那么我建议您使用Boost.Threads,这是一个非常好的、类似Posix的C++线程接口。这将使您在Windows和Linux之间易于移植。

如果使用此路由,则使用互斥锁保护线程间共享的任何数据,并使用条件变量(与互斥对象组合)从另一个线程发送信号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3134257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档