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权限。

  • 相关阅读:
    Git 分支开发规范
    小程序技术调研
    弹性布局
    vue 自定义指令的魅力
    记一次基于 mpvue 的小程序开发及上线实战
    mpvue学习笔记-之微信小程序数据请求封装
    微信小程序开发框架 Wepy 的使用
    Hbuilder 开发微信小程序的代码高亮
    luogu3807 【模板】 卢卡斯定理
    luogu1955 [NOI2015] 程序自动分析
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207129.html
Copyright © 2011-2022 走看看