先贴代码。for(i = 0; i < 2; i++)    //创建2个线程。分别用来和另外的2个进程通信
{
  g_hThread[i] = CreateThread( 0, 0,
(LPTHREAD_START_ROUTINE)RcvThread,
(VOID *)&g_Pcs[i], 0,
&dwThreadId);
}unsigned RcvThread(void *cs)
{
  for(;;) 
  {
    CRITICAL_SECTION* pCs = (CRITICAL_SECTION*)cs;
    EnterCriticalSection(pCs);
    if( !ReadFile(Ctrl->hPipe,                   //管道通信。从另外的2个进程读取数据
  Ctrl->szData,
  sizeof(Ctrl->szData),
  &Ctrl->nBytes,
  NULL )) 
    {     }
    else 
    { 
      RcvData(lpData);
    }
    LeaveCriticalSection(pCs);
  }
}void RcvData(LPTSTR lpData)
{
   ....
   case msgA:    //从进程A收到的消息
      ....;
   case msgB:    //从进程B收到的消息
      WaitForsingleObject(...);
      ....;
   case msgB:
      ....;
}按照业务逻辑。应该在处理完进程A的msgA消息后,再处理进程B的消息msgB。现在的问题是,有时候会先收到msgB。所以我打算在msgB的处理前加个WaitForsingleObject(...)来进行同步。不知道这样会不会造成死锁。我在某本书上看到,在关键代码段中加wairforsingleobject同步会容易造成死锁。
不知道还有没有其他的解决方法?