> Ну смотри я сделал следующим образом, но как была строка > пустой так и осталась... > HANDLE hCOM=CreateFile("COM1",GENERIC_WRITE | > GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL > ); Странный ты, ей богу. Теперь указал FILE_FLAG_OVERLAPPED, но не используешь его :-))
> WriteFile(hCOM,"ATI2",edPort->Text.Length(),&nb,0); > if(WaitForSingleObject(hCOM,100) == WAIT_TIMEOUT){ > ShowMessage("Время кончилось..."); > return; > } Ладно. Не хочешь сам смотреть MSDN, покажу. Вот в точности пример оттуда:
HANDLE hCom;
OVERLAPPED o;
BOOL fSuccess;
DWORD dwEvtMask;
hCom = CreateFile( "COM1",
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attributes
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);
if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
}
// Set the event mask.
fSuccess = SetCommMask(hCom, EV_CTS | EV_DSR);
if (!fSuccess)
{
// Handle the error.
}
// Create an event object for use in WaitCommEvent.
o.hEvent = CreateEvent(
NULL, // no security attributes
FALSE, // auto reset event
FALSE, // not signaled
NULL // no name
);
assert(o.hEvent);
if (WaitCommEvent(hCom, &dwEvtMask, &o))
{
if (dwEvtMask & EV_DSR)
{
// To do.
}
if (dwEvtMask & EV_CTS)
{
// To do.
}
}
---
Единственное, что тебе надо исправить это тип события (EV_RXCHAR в твоем случае). Кроме того, гораздо правильнее было бы поставить SetCommTimeouts и сделать ReadFile (а не ждать хендл, при работе с COM портом это вообще практически никогда не делается)
> Может я опять наглючил чтонибудь, хотя я непонял какого > сообщания нужно ждать я просто ставлю время на > WaitForSingleObject 100 мл сек если за это время объект не > ответил, то выходим, а если всё нормально, то читам данные. > ЭТО правильно? Нет :-)))
Почитай MSDN все таки :-)
|