|
|
  |
WaitForSingleObject, Траблы с приемом из сом порта |
|
|
|
Aug 3 2006, 07:55
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
Люди я работаю с GSM модемом и не факт что он всегда ответит и по этому я использую Wait for single object. Я пишу в порт с помошью WriteFile сбрасываю событие ResetEvent и жду приема Wait for single object. WaitComEvent неподходит так как модем может не ответить и прога зависнет. Как правильно дождаться приема и считать а по истечению таймера сказать что устройство вовремя не ответило вот мой кусок как я пытаюсь сделать подскажите как исправить или дайте свой пример
HANDEL portcomm; OVERLAPPED ovr={0}; ovr.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); if(!WriteFile(portcomm,buf_out.c_str(),strlen(buf_out.c_str()),&bc,&ovr)) { ShowMessage("Невозможно передать в порт"); } ResetEvent(ovr.hEvent); event_com=WaitForSingleObject(ovr.hEvent,10000); switch (event_com) { case WAIT_OBJECT_0: { GetOverlappedResult(port_ptr,&ovr,&bc,FALSE); ReadFile(port_ptr,buf_in,100,&bc,&ovr); Label1->Caption= buf_in; } break; case WAIT_TIMEOUT: ShowMessage("Устройство вовремя не ответило"); break; case WAIT_FAILED: ShowMessage("ERROR"); break; зарание спасибо да и я не спец то если можно и немного поясните если можно но буду рад всему
Сообщение отредактировал WHALE - Aug 3 2006, 09:05
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Aug 3 2006, 09:44
|
Группа: Новичок
Сообщений: 9
Регистрация: 1-03-05
Пользователь №: 2 990

|
Я не понимаю, почему необходимо всё так усложнять. Перед записью и чтением в/из порта необходимо установить времена тайм-аутов чтения и записи с помощью SetCommTimeout. Затем отправить данные в порт с помощью WriteFile. После этого вызвать ReadFile. Выход из этой функции осуществится если: 1) Будет получено требуемое кол-во байт; 2) Истечет время таймаута чтения. Если кол-во принятых байт равно 0, значит устройство не ответило и истекло время таймаута. Внимание! Время таймаута должно быть более, чем время необходимое для принятия требуемого кол-ва байт!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|