zoukankan      html  css  js  c++  java
  • 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权限。

  • 相关阅读:
    PCLVisualizer可视化类(4)
    PCLVisualizer可视化类(3)
    PCLVisualizer可视化类(2)
    PCLVisualizer可视化类(1)
    怎样可视化深度图像
    如何从深度图像中提取边界
    如何从点云创建深度图像
    Codeforces Round #235 (Div. 2) C. Team
    next_permutation函数
    安慰奶牛 蓝桥杯
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207129.html
Copyright © 2011-2022 走看看