2010-09-09 103 views
0

我已經繼承了一些代碼,初始化一些硬件,寫幾個字節,然後等待返回。爲此,它調用io.h中的_write函數。從我的測試來看,它看起來像是鎖定在那一點上。所以我的問題如下:io.h中的_write是否阻塞呼叫?

  1. 該函數是一個阻塞函數嗎?
  2. 有沒有辦法設置超時?
  3. 是否有替代的非阻塞函數可以用來代替?
+1

該標準在io.h中沒有定義'_write'。也許你應該使用流設施,而這會緩衝你的東西?哦,我相信答案是肯定的,不,並且http://msdn.microsoft.com/en-us/library/aa365683.aspx – 2010-09-09 14:14:28

回答

1

如果你想要做的異步Windows上的I/O,然後可以直接使用的Win32 API(查看文檔的WriteFileEx/ReadFileEx,其中包含對異步I/O VS同步指針一般背景)或考慮提升:: ASIO。

+0

我不希望異步I/OI只是需要它超時,如果有一個問題。 – 2010-09-10 07:50:08

+0

我想我可以編寫一個回調函數,它在完成時設置一個標誌,並且一個包裝器等待該標誌被設置或超時。 – 2010-09-10 07:53:47

+0

這是你必須考慮的事情 - 記住關聯和放棄掛起的回調超時後。儘管如此,即使將同步I/O作爲基準,也無法解決這個問題。 I/O完成端口是在Windows上執行異步I/O的最有效方式。我收集boost :: asio是好的,但沒有使用它自己。 – 2010-09-10 11:06:49