Конференция "WinAPI" » Отмена синхронной операции ввода/вывода [WinXP]
 
  • TMStasTM (07.02.12 16:53) [0]
    Доброго времени суток, люди добрые.
    Помогите с вопросом (от версии Delphi это не зависит,
    ОС: WinXP, Win2003):
    Если есть такая возможность, как отменить СИНХРОННУЮ операцию ввода/вывода
    (чтение COM-порта), не дожидаясь срабатывания таймаута.
    Операция чтения производится в отдельном дополнительном потоке,
    отменять нужно в основном потоке приложения.
    Кто что может посоветовать (кроме переписывания кода под асинхронный ввод/вывод (с использовнием Overlapped структур))
     
    Спасибо
  • Германн © (08.02.12 02:28) [1]
    А собс-но причём тут "операции ввода/вывода"?
    Ну выполняете вы какие-то действия в доппотоке. Хотите их прервать? Прерывайте выполнение доппотока любыми легальными способами. При необходимости даже нелегальными.
    Сом-порт способен выдержать эти неграмотные действия. Точнее, конечно не сам ком-порт, а те железяки, которые к нему подключены.
  • Eraser © (08.02.12 04:23) [2]
    > [0] TMStasTM   (07.02.12 16:53)

    в принципе, можно на базе Overlapped сделать эмуляцию синхронности, т.е. выполнять операцию ввода/вывода и сразу же ждать её завершения (между делом проверяя terminated потока, к примеру).
  • TMStasTM (08.02.12 15:50) [3]
    Германн

    >
    Прерывайте выполнение доппотока любыми легальными способами. При необходимости даже нелегальными.


    И теряем при этом некоторые ресурсы.
    А возможно и общую работоспособность ...
    Хотя надо проверить.

    А может не полениться и переписать под асинхронный ввод/вывод ...
    Спасибо
  • Вариант (08.02.12 15:50) [4]

    > Германн ©   (08.02.12 02:28) [1]

    Хороший совет, особенно про нелегальные понравилось. Например нажать эникей типа Reset или Power.  


    > TMStasTM   (07.02.12 16:53)

    Или разбирайся с тайм-аутами (COMMTIMEOUTS) и соответственно строй работу своего потока и приложения, либо пиши асинхронку. Все другое от лукавого на мой взгляд.
  • Германн © (08.02.12 15:59) [5]

    > А может не полениться и переписать под асинхронный ввод/вывод
    > ...
    > Спасибо

    На исходниках я вам именно это и посоветовал :)
  • TMStasTM (08.02.12 16:00) [6]

    > Вариант   (08.02.12 15:50)

    Таймауты на откупе у юзера, девайсы разные, всего не уследишь
  • Вариант (08.02.12 17:25) [7]

    > TMStasTM   (08.02.12 16:00) [6]


    > Таймауты на откупе у юзера, девайсы разные, всего не уследишь

    Сомнения гложут меня, что это так.
    Но в любом случае я за асинхронку
  • Сергей М. © (08.02.12 22:41) [8]

    > TMStasTM


    В случае блокирующих операций ввода/вывода для именованых пайпов точно помогает CancelIoEx().

    Вероятно поможет и в этом случае.
  • Германн © (08.02.12 23:24) [9]

    > Вероятно поможет и в этом случае.
    >

    Ему в ХР и W2003 надо.
 
Конференция "WinAPI" » Отмена синхронной операции ввода/вывода [WinXP]
Есть новые Нет новых   [134430   +4][b:0][p:0.001]