BCB多线程串口通信解决办法

BCB多线程串口通信
哪位朋友有这方面的例子,能不能将部分源码贴出来看看,或者发一份给我,不胜感激.
最好是使用Pcomm控件的串口通信程序.

------解决方案--------------------
C/C++ code

//--打开和关闭串口--
void __fastcall TMainFrm::OpenComBtnClick(TObject *Sender)
{
//
  int ret;
  port=portComBox->ItemIndex+1;
 if(openport!=1)
 {
  ret=sio_open(port);
  ret=sio_ioctl(port,B9600,P_NONE|BIT_8|STOP_1);
  if(ret!=SIO_OK)
  {
    ShowMessage("打开串口COM"+IntToStr(port)+"失败!");
    Shape1->Brush->Color=clGray;
    Shape2->Brush->Color=clGray;
  }
  else
  {
    Shape1->Brush->Color=clRed;
    Shape2->Brush->Color=clGreen;
    openport=1;
  }
 }
 else
 {
  ShowMessage("串口COM"+IntToStr(port)+"已经打开,\n请先关闭再打开其他串口!");
 }
}
//---------------------------------------
void __fastcall TMainFrm::CloseComBtnClick(TObject *Sender)
{
//
 if(openport==1)
 {
   sio_close(port);
   openport=0;
   Shape1->Brush->Color=clGray;
 }
}
//---------------------------------------
//发送数据
void __fastcall TMainFrm::SendCheckBtnClick(TObject *Sender)
{
// 5a 02 c6 9f 00 00 00
 unsigned char buf[5];
   int ret,error=0;
   buf[0]=0x5a;
   buf[1]=0x02;
   buf[2]=0xc6;
   buf[3]=0x9f;
   buf[5]=0;
   buf[6]=0;
   buf[7]=0;
   do
   {
   error++;
   ret= sio_write(port,buf,8);
   Sleep(20);
   if(error>5)break;
   }while(ret<8);

}
//----------------
reciever *recieverThread;
void __fastcall TMainFrm::FormCreate(TObject *Sender)
{
  Shape1->Brush->Color=clGray;

  recieverThread=new reciever(true);
  recieverThread->Resume();
  OpenComBtn->Click();
}

//--接收数据的线程---
//---------------------------------------
#include <Classes.hpp>
//---------------------------------------
class reciever : public TThread
{            
private:
protected:
        void __fastcall Execute();
public:
        __fastcall reciever(bool CreateSuspended);
};
//---------------------------------------
void __fastcall TMyThread::Execute()
{
    //inherited;
        //struct date dt;
        //struct time tm;
    Byte        xReady;
    Byte        xInPtr;
    Byte        xInData,xStart;
    Byte        xAdress;
//    Byte        Comm;
    int        xChk;
    Byte        xChk1,crcChk1;
    Byte        xChk2,crcChk2;
    Byte        xStatus;
//    Byte        echo;
    int         ii,jj,ret;
    unsigned char xbuf[0x100];
    unsigned char xindex,xcount;
        unsigned  short crchelp;
        unsigned char Comm2;
    int len,inlen;
        len=0;
    xReady=0;
    xInPtr=0;
    xChk=0;
    long timeout=0;
        long Check_Time=0;
    while(!Stop)
    {
     try
     {
       //if(xInPtr==0)Sleep(2);
        Sleep(1);
                ret=sio_iqueue(comm_port);
                     if(ret>0)
                     {
                        xInData=sio_getch(comm_port);
}
}