Как прервать выделенный вызов на окнах? - PullRequest
4 голосов
/ 13 марта 2011

Я знаю, что это, вероятно, основной вопрос, но я бы хотел услышать лучший способ понять это.

Так что к проблеме. У меня есть поток драйвера, использующий вызов select, и у меня есть поток GUI, который иногда должен прерывать выбор путем записи в некоторый дескриптор файла в том же процессе (GUI FD или что-то). Я использовал pipe в UNIX, но у меня нет опыта работы с сокетами для Windows, поэтому я не уверен, какой тип FD мне следует использовать. Пример высоко ценится, но не обязателен).

Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

select() не лучший способ реализовать асинхронный ввод / вывод под Windows.к сожалению, вызов select() в окнах работает только с дескрипторами сокетов, а не с дескрипторами труб или дескрипторов.

Вы должны взглянуть на перекрывающийся ввод-вывод 1006 *.

используя событие в вашей перекрытой структуре, вы можете иметь поведение, близкое к select().любое событие в сокете вызовет событие, которое можно подождать, используя WaitForMultipleObjects().теперь ваш поток GUI может сигнализировать потоку ввода-вывода, устанавливая определенное (отдельное) событие, которое вы создаете с помощью вызова CreateEvent().

0 голосов
/ 13 марта 2011

Вы можете уменьшить время ожидания для выбора, а затем выполнить цикл, если это был тайм-аут.Или вы можете отправить простой пакет в выбранный сокет, вызывая его пробуждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...