`
mywebcode
  • 浏览: 1004494 次
文章分类
社区版块
存档分类
最新评论

Chapter10-“I/O设备的同步和异步”之I/O设备同步操作

 
阅读更多

最常用的两个函数-WriteFile、ReadFile

BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);

BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);

ReadFile函数是向hFile句柄对应的设备进行读操作,且hFile句柄被创建时需要 GENERIC_READ 访问权限。
WriteFile函数是向hFile句柄对应的设备进行写操作,且hFile句柄被创建时需要 GENERIC_WRITE 访问权限。
对于同步I/O操作来说,最后一个参数lpOverlapped都被指定为NULL。


将数据刷新至设备

在CreateFile函数中我们可以通过几个标识(Flags)来设定系统缓存数据的方式;不过对于串口(Serial Port)、管道(pipes),我们可以调用BOOL FlushFileBuffers( HANDLE hFile)函数来强制系统将缓存的数据写入到I/O设备中。


同步I/O的取消操作

同步I/O操作使用简单,但它有一个弊端就是它会阻塞该线程的其他操作直到I/O操作完成。对于一般负责任的程序来说,你应该尽量使用异步I/O操作。大部分程序被挂起的共同的原因就是等待同步I/O操作的完成。

一个取消同步I/O操作的函数就是:BOOL CancelSynchronousIo( HANDLE hThread);其中hThread就是要取消其I/O操作的线程句柄,这个线程句柄在创建时需有THREAD_TERMINATE权限。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics