Есть функция, но работает абсолютно не правильно. Подскажите, как исправить, чтобы сабж нормально принимался? Вот сама функция:
| Код | DWORD WINAPI CComWorker::threadFunc( LPVOID lpParam ) { CComWorker * worker = (CComWorker *)lpParam; bool res; bool fSuccess; bool snd; bool eve; DWORD s_r; DWORD dwError; DWORD Status; COMSTAT lpCommStat; char sMsg[255]; DWORD bc1; memset(sMsg, 0, 255); //s_r=true; int fin; fin=1;
worker->mask =EV_RXCHAR | EV_TXEMPTY ; fSuccess =SetCommMask(worker->m_hCom, worker->mask ); if (!fSuccess) { dwError = GetLastError(); sprintf(sMsg, "Set mask failed: Port=%s Error = %d", "com1", dwError); AfxMessageBox(sMsg); }
worker->ovr.hEvent = CreateEvent ( NULL, // default security attributes TRUE, // Manual reset event FALSE, // not signaled NULL // no name ); worker->ovr.Internal = 0; worker->ovr.InternalHigh = 0; worker->ovr.Offset = 0; worker->ovr.OffsetHigh = 0; assert(worker->ovr.hEvent); worker->Send(worker->buf_out);// send
WaitCommEvent(worker->ovr.hEvent,&(worker->mask),&(worker->ovr)); WaitForSingleObject(worker->ovr.hEvent,INFINITE); if ((worker->mask & EV_TXEMPTY)== EV_TXEMPTY) { PurgeComm(worker->m_hCom, PURGE_TXCLEAR); }; ResetEvent(worker->ovr.hEvent); while (true) { WaitCommEvent(worker->ovr.hEvent,&(worker->mask),&(worker->ovr)); Status=WaitForSingleObject(worker->ovr.hEvent,INFINITE); { if ((worker->mask & EV_RXCHAR) == EV_RXCHAR) { ReadFile(worker->m_hCom,worker->buf_in,7,&bc1,&(worker->ovr)); worker->bc = bc1; (*(worker->m_hResMess))((char*)(worker->buf_in), worker->bc); PurgeComm(worker->m_hCom,PURGE_RXCLEAR); memset(worker->buf_in,0,100); } }; }; return 0; };
|
Помогите сделать правильно... Заранее благодарен. |