2010-09-09 3 views
0

Я унаследовал некоторый код, который, чтобы инициализировать некоторое оборудование, записывает несколько байтов, а затем ждет возврата. Для этого он вызывает функцию _write от io.h. Из моего тестирования, похоже, что он блокируется в этот момент. Поэтому мои вопросы таковы:_write в io.h блокирующий вызов?

  1. Эта функция блокирует функцию?
  2. Есть ли способ установить тайм-аут?
  3. Есть ли альтернативная неблокирующая функция, которую я мог бы использовать вместо этого?
+1

Стандарт не определяет '_write' в io.h. Возможно, вместо этого вы должны использовать средства потока, которые будут задерживать вас? О, и я считаю, что ответы да, нет, и http://msdn.microsoft.com/en-us/library/aa365683.aspx –

ответ

1

Если вы хотите сделать асинхронный ввод/выводом в Windows, а затем использовать либо Win32 API, непосредственно (посмотрите на документах для WriteFileEx/ReadFileEx, которые содержат указатели на общий фон на асинхронном I/O против синхронизации) или рассмотреть подталкивание :: ASIO.

+0

Я не хочу, чтобы асинхронный I/OI просто нуждался в нем, чтобы отключиться, если есть проблема. –

+0

Я думаю, что я мог бы написать функцию обратного вызова, которая устанавливает флаг, когда это будет сделано, и оболочку, чтобы подождать, пока этот флаг не будет установлен или не установлен. –

+0

Это то, что вам нужно учитывать - помнить о необходимости корреляции и отбрасывания ожидающих обратных вызовов после таймаута. Однако нет возможности даже подойти к этой проблеме с синхронизацией ввода/вывода в качестве базовой линии. Порты ввода-вывода являются наиболее эффективным способом для асинхронного ввода-вывода в Windows. Я собираю boost :: asio хорошо, но не использовал его сам. –

Смежные вопросы