我使用CreateThread windows创建了两个线程A&B。我试图把数据从线程A发送到B。
我知道我可以使用事件对象,并使用"WaitForSingleObject“方法在另一个事件对象中等待事件对象。这个事件所做的一切只是向线程发出信号。就是这样!,但是我怎么能发送数据。,我也不想让线程B等到线程A信号。它有自己的工作要做。我不能让它等待。
我找不到允许我通过线程ID或返回句柄向工作线程和主线程发送数据的Windows函数。我不想在我的项目中引入MFC依赖项,并且希望听到关于其他人在这种情况下会或已经做的任何建议。提前感谢您的帮助!
发布于 2010-06-28 16:57:51
首先,您应该记住,Windows为您提供了许多处理线程的机制:I/O完成端口、旧线程池和新线程池。取决于您正在做的事情,它们中的任何一个都可能对您的目的有用。
至于“发送”数据从一个线程到另一个线程,您有两个选择。Windows消息队列是线程安全的,一个线程(即使它没有窗口)可以有一个消息队列,您可以将消息发送到使用PostThreadMessage。
我还在另一个答案中发布了线程安全队列的代码。
至于让线程继续执行,但是在发生更改时请注意,典型的方法是让它调用超时值为0的WaitForSingleObject,然后检查返回值--如果是WAIT_OBJECT_0,事件(或其他什么)已经设置,因此它需要注意更改。如果是WAIT_TIMEOUT,则没有任何更改,并且可以继续执行。无论哪种方式,WaitForSingleObject都会立即返回。
发布于 2010-06-28 16:35:36
由于这两个线程处于相同的进程中(至少听起来是这样的),所以没有必要“发送”数据。他们可以共享它(例如,一个简单的全局变量)。您确实需要通过事件、信号量、互斥对象等同步访问它。
取决于你在做什么,它可以非常简单。
Thread1Func() {
Set some global data
Signal semaphore to indicate it is available
}
Thread2Func() {
WaitForSingleObject to check/wait if data is available
use the data
}发布于 2010-06-28 18:00:15
如果您关注最小化Windows依赖关系,并假设您正在使用C++进行编码,那么我建议您使用Boost.Threads,这是一个非常好的、类似Posix的C++线程接口。这将使您在Windows和Linux之间易于移植。
如果使用此路由,则使用互斥锁保护线程间共享的任何数据,并使用条件变量(与互斥对象组合)从另一个线程发送信号。
https://stackoverflow.com/questions/3134257
复制相似问题