多執行緒資料採集

licup123發表於2009-07-09
#define   MAXBUFQUEUE   8  
  struct   BUFFER_ITEM   {  
        LPBYTE   Buffer;  
        HANDLE   hFinishDone;//標識資料處理完成    
  };  
  BUFFER_ITEM   BufferArray[MAXBUFQUEUE];  
   
  //初始化  
  for(int   i=0;i  {  
          Buffer   =   new   BYTE[...];  
          hFinishDone     =   CreateEvent(   NULL,FALSE,TURE,NULL   );   //開始有訊號  
  }  
   
  採集執行緒      
  while(1)      
  {      
            for(i=0;i            {      
                  if   (   WAIT_OBJECT_0   ==WaitForSingleObject(    
                            BufferArray[i].hFinishDone,0   )//是否處理完,沒有則下一個    
                  {  
                      採集資料      
                      PostThreadMessage(idThreadDataProcess,UM_SETDATA,  
                        (WPARAM)&(BufferArray[i]),0   );      
                  }                
              }      
     
  }      
     
   
  處理執行緒      
  while(GetMessage(&msg,NULL,0,0))      
  {      
                        if(msg.message==UM_SETDATA)      
                        {      
                              BUFFER_ITEM*   lpBuffer   =   (BUFFER_ITEM*)msg.wParam;  
                             
                            處理資料                                                  
                             
                            SetEvent(lpBuffer->hFinishDone);//資料處理完,重設有訊號  
                            continue;      
                        }      
  }  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10697500/viewspace-608768/,如需轉載,請註明出處,否則將追究法律責任。

相關文章