PostThreadMessage и асинхронный ввод/вывод

Тема в разделе "WASM.BEGINNERS", создана пользователем XshStasX, 13 мар 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Код (Text):
    1. ResetEvent(Over->Over.hEvent);
    2. WriteFile(Over->hCOM,(LPVOID)msg->lParam,msg->wParam,&s,&Over->Over);
    3. GetOverlappedResult(Over->hCOM,&Over->Over,&s,true);
    4. s=GetLastError();(будет равно 997)
    Over->hCOM - открыт на чтение/запись с флагом FILE_FGLAG_OVERLAPPED.
    Over->Over.hEvent - событие с ручным сбросом.
    так вот, по идеи операция ввода/вывода после
    Код (Text):
    1. GetOverlappedResult(Over->hCOM,&Over->Over,&s,true);
    должна как бы завершиться, а она не завершаеться о чем говорит
    и это мешает отправки потоку сообщения через PostThreadMessage, после отправки GetLastError() возвращает 1159 (((....
    как с этим бороться ?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    XshStasX
    Если ошибка об этом и говорит, то вот сам факт наличия ненулевого значения в s после выполнения GetLastError не говорит ни о чём. GetLastError нужно вызывать только в том случае, если основная функция вернула ошибку. Иначе GetLastError может вернуть что угодно.
    Что-то у меня большие сомнения, что PostThreadMessage не выполняется именно поэтому. Скорее всего Вы используете неудачное сообщения, которое ни в каком случае не может быть доставлено асинхронно.
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    *сообщение
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    если не выполнять эти две строки:
    Код (Text):
    1. WriteFile(Over->hCOM,(LPVOID)msg->lParam,msg->wParam,&s,&Over->Over);
    2. GetOverlappedResult(Over->hCOM,&Over->Over,&s,true);
    то PostThreadMessage нормально выполняеться.
    А если их выполнить то PostThreadMessage возвращает 0, а GetLastError 1159.
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    хотя сами WriteFile и GetOverlappedResult успешно выполняються...