Eugen3d
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору AxVPast Асинхронный это когда при открытии порта указывается FILE_FLAG_OVERLAPPED, тогда работа с портом (ReadFile и WriteFile) будут происходить в фоновом режиме не блокируя поток до завершения. Я уже более-менее реализовал работу, но всеравно грабли. Открываю порт(асинхронный) и вызывается функция для работы: WriteFile(hCom,&ToSend,1,&nb,&ov); GetOverlappedResult(hCom,&ov,&nb,TRUE); Sleep(10); WriteFile(hCom,&ToSend2,2,&nb,&ov); GetOverlappedResult(hCom,&ov,&nb,TRUE); Sleep(10); Temp=1; while (Temp!=0) { Temp=0; ov.hEvent=CreateEvent(NULL, 1, 1, NULL); SetCommMask(hCom,EV_RXCHAR); WaitCommEvent(hCom,&mask,&ov); WaitForSingleObject(ov.hEvent, 500); ReadFile(hCom,&Temp,2,&nb,&ov); if (Temp!=0) Recives.Add(Temp); } ::PostMessage(HWND(pParam),WM_USERMSGA,0,0); WriteFile(hCom,&ToSend,1,&nb,&ov); GetOverlappedResult(hCom,&ov,&nb,TRUE); Sleep(10); Что она должна делать? Передать в порт однобайтное число (например 123), подождать, отправить двубайтное число (123+16768), принять все, что идет с порта, отправить один байт (123). Собственно, работает это через раз - наверняка из-за очень корявого кода. Подскажите, что исправить? |