Код (Text): ResetEvent(Over->Over.hEvent); WriteFile(Over->hCOM,(LPVOID)msg->lParam,msg->wParam,&s,&Over->Over); GetOverlappedResult(Over->hCOM,&Over->Over,&s,true); s=GetLastError();(будет равно 997) Over->hCOM - открыт на чтение/запись с флагом FILE_FGLAG_OVERLAPPED. Over->Over.hEvent - событие с ручным сбросом. так вот, по идеи операция ввода/вывода после Код (Text): GetOverlappedResult(Over->hCOM,&Over->Over,&s,true); должна как бы завершиться, а она не завершаеться о чем говорит и это мешает отправки потоку сообщения через PostThreadMessage, после отправки GetLastError() возвращает 1159 (((.... как с этим бороться ?
XshStasX Если ошибка об этом и говорит, то вот сам факт наличия ненулевого значения в s после выполнения GetLastError не говорит ни о чём. GetLastError нужно вызывать только в том случае, если основная функция вернула ошибку. Иначе GetLastError может вернуть что угодно. Что-то у меня большие сомнения, что PostThreadMessage не выполняется именно поэтому. Скорее всего Вы используете неудачное сообщения, которое ни в каком случае не может быть доставлено асинхронно.
если не выполнять эти две строки: Код (Text): WriteFile(Over->hCOM,(LPVOID)msg->lParam,msg->wParam,&s,&Over->Over); GetOverlappedResult(Over->hCOM,&Over->Over,&s,true); то PostThreadMessage нормально выполняеться. А если их выполнить то PostThreadMessage возвращает 0, а GetLastError 1159.