-
Доброго времени суток, люди добрые.
Помогите с вопросом (от версии Delphi это не зависит,
ОС: WinXP, Win2003):
Если есть такая возможность, как отменить СИНХРОННУЮ операцию ввода/вывода
(чтение COM-порта), не дожидаясь срабатывания таймаута.
Операция чтения производится в отдельном дополнительном потоке,
отменять нужно в основном потоке приложения.
Кто что может посоветовать (кроме переписывания кода под асинхронный ввод/вывод (с использовнием Overlapped структур))
Спасибо
-
А собс-но причём тут "операции ввода/вывода"?
Ну выполняете вы какие-то действия в доппотоке. Хотите их прервать? Прерывайте выполнение доппотока любыми легальными способами. При необходимости даже нелегальными.
Сом-порт способен выдержать эти неграмотные действия. Точнее, конечно не сам ком-порт, а те железяки, которые к нему подключены.
-
> [0] TMStasTM (07.02.12 16:53)
в принципе, можно на базе Overlapped сделать эмуляцию синхронности, т.е. выполнять операцию ввода/вывода и сразу же ждать её завершения (между делом проверяя terminated потока, к примеру).
-
Германн
>
Прерывайте выполнение доппотока любыми легальными способами. При необходимости даже нелегальными.
И теряем при этом некоторые ресурсы.
А возможно и общую работоспособность ...
Хотя надо проверить.
А может не полениться и переписать под асинхронный ввод/вывод ...
Спасибо
-
> Германн © (08.02.12 02:28) [1]
Хороший совет, особенно про нелегальные понравилось. Например нажать эникей типа Reset или Power.
> TMStasTM (07.02.12 16:53)
Или разбирайся с тайм-аутами (COMMTIMEOUTS) и соответственно строй работу своего потока и приложения, либо пиши асинхронку. Все другое от лукавого на мой взгляд.
-
> А может не полениться и переписать под асинхронный ввод/вывод
> ...
> Спасибо
На исходниках я вам именно это и посоветовал :)
-
> Вариант (08.02.12 15:50)
Таймауты на откупе у юзера, девайсы разные, всего не уследишь
-
> TMStasTM (08.02.12 16:00) [6]
> Таймауты на откупе у юзера, девайсы разные, всего не уследишь
Сомнения гложут меня, что это так.
Но в любом случае я за асинхронку
-
> TMStasTM
В случае блокирующих операций ввода/вывода для именованых пайпов точно помогает CancelIoEx().
Вероятно поможет и в этом случае.
-
> Вероятно поможет и в этом случае.
>
Ему в ХР и W2003 надо.