线程间通讯

参考文章连接文章连接:http://www.codeproject.com/cpp/Win32_MQ_MultiThreading.asp

下边的事例程序用到了线程,test继承自CThread,参考下面的链接:

http://blog.csdn.net/wei801004/archive/2006/05/18/744341.aspx

 #define THRD_MESSAGE WM_USER + 2

DWORD WINAPI test::ThreadWorkItem(LPVOID lpParameter)
{
 MSG msg;
 while (true)
 {
  BOOL MsgReturn = ::PeekMessage(&msg, NULL, 0, 0,PM_REMOVE);//程序会立刻返回

 //BOOL MsgReturn = ::GetMessage(&msg, NULL, 0, 0);//程序阻塞接受消息

  if (MsgReturn)
  {
   switch ( msg.message )
   {
   case THRD_MESSAGE:
    {
     break;
    }
   default:
    cout<<"Error!"<<endl;
    break;
   }
  }
 }
 return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
 test oTest;
 oTest.Start();

 PostThreadMessage (oTest.m_dwThreadID, THRD_MESSAGE, 0,0);

 Sleep(100);
}

在Qt中,线程通讯可以使用共享内存来实现。共享内存是一种跨进程共享数据的机制,可以在不同的线程传递数据。 Qt提供了QSharedMemory类来操作共享内存。下面是一个使用共享内存进行线程通讯的示例: ```cpp // 创建一个共享内存对象 QSharedMemory sharedMemory; // 设置共享内存的名称 sharedMemory.setKey("MySharedMemory"); // 在一个线程中写入数据到共享内存 if (sharedMemory.create(1024)) { sharedMemory.lock(); char* data = static_cast<char*>(sharedMemory.data()); // 在这里写入数据到共享内存 // 注意:要确保多个线程对共享内存的访问是互斥的,可以使用QMutex来实现互斥访问 sharedMemory.unlock(); } // 在另一个线程中读取共享内存中的数据 if (sharedMemory.attach()) { sharedMemory.lock(); char* data = static_cast<char*>(sharedMemory.data()); // 在这里读取共享内存中的数据 sharedMemory.unlock(); sharedMemory.detach(); } ``` 在上面的示例中,我们创建了一个名为"MySharedMemory"的共享内存对象,并设置了它的大小为1024字节。然后,在一个线程中写入数据到共享内存中,另一个线程则可以读取共享内存中的数据。 需要注意的是,在多个线程对共享内存进行读写时,需要确保访问的互斥性,以避免数据竞争。可以使用QMutex或其他同步机制来实现互斥访问。 另外,还可以使用信号与槽机制来实现线程通讯。Qt提供了QObject::moveToThread()方法,可以将一个QObject对象移动到指定的线程中,从而实现线程的信号与槽的连接。这种方式相对于共享内存来说更加方便和安全。 希望以上信息能对你有帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值