Зависает форма окна при DeviceIoControl

Тема в разделе "WASM.BEGINNERS", создана пользователем DeRekX, 25 янв 2009.

  1. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Добрый день!

    Проблема следующая:

    Управление драйвером осуществляется через обычное MFC'шное приложение созданное через визард.
    При посылке некоторого контрольного кода из GUI в драйвер, главное окошко GUI подвисает.
    Ответ приходит из драйвера через 10-20 секунд, форма отвисает.

    Подскажите как организовать, чтобы форма на подвисала, пока ещё не пришёл ответ от драйвера.

    Видимо нужно сделать отдельный поток, который и будет "общаться" с драйвером.
    Подскажи детальнее, что именно должно быть в этом потоке и где должна находится функция WaitForMultipleObjects()

    Заранее благодарен.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Используй последнйи параметр в DeviceIoControl.
     
  3. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    n0name
    параметр посмотрел, сделал как написано в msdn, но всё равно подвисает.
    В GUI
    Код (Text):
    1. hDevice = CreateFile( LinkName , FILE_ALL_ACCESS ,0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED ,NULL );
    Код (Text):
    1. OVERLAPPED Overlapped;
    2. Overlapped.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
    3. DeviceIoControl(hDevice,CtrlCode01,
    4.         InBuf,InBufSize,OutBuf,OutBufSize,&nBytesRetun, &Overlapped );
    Если есть исходник с похожей обработкой пришли, пожалуйста, на derek-x@mail.ru
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    оффтоп: краснее морда лица при скатывание с горки
    А вообще, хочется увидеть реализацию. Зачем в сообщение окну тогда читать. В общем код в студию!
     
  5. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Исходник - _http://webfile.ru/2585497
    По нажатию на кнопку GUI отсылает драйверу код GET_MEMORY. Драйер получает начинает дампить память. Форма подвисает.
    В идеале сделать так, что бы драйвер данные не сохранял в файл, а отправлял их в GUI. GUI их обрабатывал.
    Где о такой синхронизации можно почитать, посмотреть?
    Если кто-то решал подобные задачи, пожалуйста, поделитель опытом.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. memset(&Overlapped, 0, sizeof(Overlapped));
     
  7. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    надобно FILE_FLAG_OVERLAPPED указать
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    дык он указал.