Witam.

Od jakiegos czasie pisze program, ktory bedzie komunikowal sie z urzadzeniem poprzez port COM. Urzadzenie to bedzie wysylalo dane w blizej nieokreslonym czasie, dlatego musze uzyc funkcji, ktore beda "monitorowac" ruch na porcie. I tutaj wlasnie mam problem. Mam juz napisana calosc, ale nie wiem jak w tym przypadku stworzyc nowy watek oraz jak przechwytywac do zmiennej dane, ktore zostana odczytane. Srodowisko to VC C++ 6.0 i MFC

Kod:

void CADlg::OnOK()
{
	
	TCHAR *port = TEXT("COM2");
	HANDLE hwd;
	bool sukces;
	DCB dcb;
	OVERLAPPED o;
	DWORD dwEvtMask = 0;
	DWORD lpEvtMask;

	//otwarcie portu
	hwd = CreateFile(port, GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING,0,NULL);


	if(hwd == INVALID_HANDLE_VALUE) 
		{
			SetDlgItemText(IDC_EDIT1,"Nie mozna otworzyc portu");
		} else 
		{
		 // set timeouts
//		SetDlgItemText(IDC_EDIT1,"Otworzono port");
//		COMMTIMEOUTS cto = { 0xFFFFFFFF, 0, 1000, 0, 1000 };
		COMMTIMEOUTS cto = { 50, 50, 10, 0, 1000 };
		SetCommTimeouts(hwd,&cto);
		};

		

		//pobranie aktualnych ustawien portu
		sukces = GetCommState(hwd, &dcb); 
			if (!sukces) 
		 { 
			  SetDlgItemText(IDC_EDIT1,"Blad przy ustawieniu portu");  
		 }

		memset(&dcb,0,sizeof(dcb));
		dcb.DCBlength = sizeof(dcb);
		dcb.BaudRate = CBR_9600;
		dcb.fParity = TRUE;
		dcb.fBinary = TRUE;
//		dcb.fDtrControl = DTR_CONTROL_ENABLE;
//		dcb.fRtsControl = RTS_CONTROL_ENABLE;
//		dcb.fRtsControl = DTR_CONTROL_HANDSHAKE;
 
		dcb.Parity = NOPARITY;
		dcb.StopBits = ONESTOPBIT;
		dcb.ByteSize = 8;
 
		GetCommMask(hwd,&lpEvtMask);

		if(!SetCommState(hwd,&dcb))
		printf("Blad");




		SetCommMask(hwd,EV_RXCHAR);

		char buf2[5];

		DWORD read;


		

		o.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);
		o.Internal = 0;
		o.InternalHigh = 0;
		o.Offset = 0;
		o.OffsetHigh = 0;

		assert(o.hEvent);

		 DWORD dwErrorFlags;
			COMSTAT ComStat;
			char rfid[]="";
		 ClearCommError(hwd, &dwErrorFlags, &ComStat);
		_sleep(50);


		 if(WaitCommEvent(hwd, &dwEvtMask, &o)>0) 
		 {
			if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR) 
			{
				 sukces = ReadFile(hwd,buf2,sizeof(buf2),&read,NULL);
					if(sukces)
					{
					 CString strCvt;
					 int Len = sizeof(buf2);
					 for(int i = 0; i <= 4; i++)
						{
							strCvt.Format("%d ", (BYTE)buf2[i]);
							strcat(rfid,strCvt);
							
						}
					 SetDlgItemText(IDC_EDIT1,rfid);
					 m_list.AddString(rfid);
					}
			}
			else
			{
    
			DWORD dwRet = GetLastError();
			if( ERROR_IO_PENDING == dwRet)
				{
					 sukces = ReadFile(hwd,buf2,strlen(buf2),&read,NULL);
						if (!sukces) 
							 { 
							   SetDlgItemText(IDC_EDIT1,"Blad przy odczycie"); 
							 }
				}
				else 
				SetDlgItemText(IDC_EDIT1,"Blad przy odczycie!");
			}
		
	}

		 
		CloseHandle(hwd);

}