views:

44

answers:

1

I've inherited some code which, to initialise some hardware, writes a few bytes and then waits for a return. To do this it calls the _write function from io.h. From my testing, it looks like it's locking up at that point. So my questions are as follows:

  1. Is that function a blocking function?
  2. Is there a way of setting a timeout?
  3. Is there an alternative non-blocking function I could use instead?
+1  A: 

If you want to do async I/O on Windows then either use the Win32 APIs directly (look at docs for WriteFileEx/ReadFileEx, which contain pointers to general background on async I/O vs sync) or consider boost::asio.

Steve Townsend
I don't want async I/O I just need it to time out if there's a problem.
Jon Cage
I guess I could write a callback function which sets a flag when it's done, and a wrapper to wait until that flag is set or timed out..
Jon Cage
That's the kind of thing you have to consider - remembering to correlate and discard pending callbacks after the timeout. There's no way to even approach this problem with sync I/O as a baseline though. I/O completion ports is the most efficient way to do async I/O on Windows. I gather boost::asio is good but have not used it myself.
Steve Townsend