我试图使用writefile和readfile函数通过串行端口连接发送和接收字符串。我必须异步执行此操作,因为要读取的字节数将始终不同,并且readfile只会挂起或阻塞,直到获得正确的字节数。现在我试图异步执行此操作,因此我的writefile函数将不会发送任何数据,并且我的readfile函数似乎会被跳过,因为下一行开始执行它,而不读取任何字符。不知道这是我的Overlapped结构还是我的超时问题。但我在这一刻卡住了。WriteFile()和ReadFile()异步无法写入或读取

超时

void Serial::OpenPortRead()

{

HANDLE sSerial = CreateFile(L"COM3",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);

//Timeout Settings

COMMTIMEOUTS CommTimeouts;

GetCommTimeouts(sSerial, &CommTimeouts);

CommTimeouts.ReadIntervalTimeout = 5000;

CommTimeouts.ReadTotalTimeoutMultiplier = 2;

CommTimeouts.ReadTotalTimeoutConstant = 10;

CommTimeouts.WriteTotalTimeoutMultiplier = 50;

CommTimeouts.WriteTotalTimeoutConstant = 500;

//Port Settings

DCB dcbSerialParams = {0};

dcbSerialParams.DCBlength=sizeof(dcbSerialParams);

dcbSerialParams.BaudRate=CBR_19200;

dcbSerialParams.ByteSize=8;

dcbSerialParams.StopBits=ONESTOPBIT;

dcbSerialParams.Parity=NOPARITY;

SetCommState(sSerial,&dcbSerialParams);//Apply Settings to Handle

}

写文件功能

void Serial::WritePort(CString buffer)

{

DWORD bytes;//pointer to hold number of bytes written

USES_CONVERSION;

CW2A buf((LPCWSTR)buffer);//Convert unicode to ascii

OpenPortRead();

OVERLAPPED overlapped_structure;

memset(&overlapped_structure, 0, sizeof(overlapped_structure));

overlapped_structure.Offset = 0;

overlapped_structure.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

WriteFile(sSerial, buf,strlen(buf),&bytes,&overlapped_structure);//Send string

}

读取文件功能

int Serial::ReadPort(CString buf){

OpenPortRead();// Open Serial Communication for reading

const int buffer_size = 10;

char buffer[10];//buffer to hold recieved string

memset (buffer, 0, buffer_size * sizeof (char));

int n, num,iTemp,i=0;

OVERLAPPED overlapped_structure;

memset(&overlapped_structure, 0, sizeof(overlapped_structure));

overlapped_structure.Offset = 0;

overlapped_structure.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

DWORD bytesRead;//pointer to number bytes read

ReadFile(sSerial,&buffer,buffer_size,&bytesRead,&overlapped_structure);// begin read

//Used this function because return would be filled with extra raw data characters

buffer[n] = StringLength(buffer, &n);//find length of string returned

num = n;

+0

在WriteFile/ReadFile之后,您需要等待重叠事件。 –

2013-02-15 15:09:27

+0

感谢您的回复,但可能是一个帮助我的例子 –

2013-02-15 15:13:21

+1

重叠I/O的要点是它会在*稍后*完成,并且您的程序可以在正在进行时继续运行。等待它完全消除了首先使用它的要点。无论您的问题是什么,重叠的I/O都不是答案。 –

2013-02-15 15:22:11

vs中readfile的作用_WriteFile()和ReadFile()异步无法写入或读取相关推荐

  1. java中打开特定编码的文本_指定编码写入和读取文件内容

    为了完美解决你的问题,特分享我自己的FileKit.java工具给你. 你只需要使用createFile方法,传入一行一个的List对象就可以生成了,目录不存在这些都判断了,只要你的目录可写就行了. ...

  2. 在HTML中标记tel是什么意思,'tel'属性在AEM 6.1的经典UI中富文本编辑器中的锚标记的href中不起作用...

    我正在使用AEM 6.1 SP2,我试图在定位标记的href中启用'tel'属性以使点击调用功能性工作.我已经添加了'htmlRules'节点 ,并将htmlRules节点下的节点与'protocol ...

  3. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  4. Science:亚硝酸盐氧化细菌在黑暗海洋中的主要作用

    文章目录 亚硝酸盐氧化细菌在黑暗海洋中的主要作用 写在前面 摘要 热心肠日报 背景 结果 图1 非全长16S rRNA基因序列的系统发育树 图2 通过募集宏基因组片段的方法确定亚硝酸盐氧化细菌单扩增基 ...

  5. 丰度决定了细菌在复杂群落中的功能作用

    本文转载自"微生态笔记",已获授权 标题:Abundance determines the functional role of bacterial phylotypes in c ...

  6. tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率 损失率,便于判断模型的训练效果:是过拟合还是欠拟合(过拟合)

    tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率,便于判断模型的训练效果:是过拟合还是欠拟合 过拟合:训练数据的准确率较高而测试数据的准确率较低 欠 ...

  7. C#中构造函数的作用

    C#中构造函数的作用 共同点: 都是实例化对象,初始化数据的 默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有, ...

  8. python里dir是什么意思_python中dir什么作用

    python中dir的作用是:1.dir函数传入数据类型返回该数据类型的所有内置方法:2.dir函数传入模块名返回该模块的所有属性和方法. dir() 内置函数的作用 python 内置方法有很多,无 ...

  9. 浅析SEO优化中标签的作用?

    目前,已经有很多企业网站有专门的优化人员来进行SEO优化,在网站SEO优化的过程中会使用到很多标签来利于搜索引擎的读取,提升网站的排名和权重.就以大连网龙科技旗下产品云霸屏为例来讲,云霸屏作为一款全网 ...

最新文章

  1. python flask 部署_如何进行Python Flask项目的部署?
  2. 使用t-SNE算法对数据进行降维并可视化实战,与KernalPCA、LLE对比降维可视化的效果
  3. hdu1753大明A+B
  4. 大学计算机课程操作文档,计算机操作系统大学课程.pptx
  5. aws fargate_借助Fargate和EKS,AWS甚至可以实现Cloud-ier和Kuberneties-ier
  6. SQL server 2012序列号 注册码 z
  7. NOIP201501金币
  8. 0610PHP基础:运算符、字符串处理函数、解析符号、数组
  9. Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”...
  10. scrapy生成json中文为ASCII码解决
  11. Android Studio 修改项目包名(最后一级)
  12. 汉字,五笔,拼音的转换
  13. tensorflow之读取jpg图像保存为tfrecord再读取
  14. 直角三角形 纪中 1385 数学_斜率 英文题解
  15. 在Visual Studio 2010中创建多项目(解决方案)模板【一】
  16. 大学生静态HTML鲜花网页设计作品 DIV布局网上鲜花介绍网页模板代码 DW花店网站制作成品 web网页制作与实现
  17. MYSQL临时表,大数据查询优化
  18. 【Java】运用泽勒一致性计算某天是星期几
  19. IDEA快捷键设置,选择Eclipse风格的快捷键,自动补全快捷键,关闭当前窗口快捷键Ctrl+W 自动导入设置,引入外
  20. 参数等效模型可以用于_盘式永磁涡流驱动器的电磁-温度耦合解析模型

热门文章

  1. 六、应用层(五)万维网(www)
  2. 轻松一刻,Linux 娱乐命令整理
  3. 第二章 第四节:替换和切割
  4. Flutter应用名称语言国际化
  5. 父亲节快到了,几句父亲的话留下
  6. python 字符视频_Python20行代码实现视频字符化
  7. java 解决微信配置服务器时出现的token验证失败问题
  8. 深入理解操作系统(10)第四章:处理器体系结构(2)Y86-64的顺序实现(包括:SEQ/指令的各阶段操作:取指,解码,执行,访存,回写,更新PC/序列指令/硬件结构/时序/阶段的实现/SEQ+)
  9. SSL 实例 centos6.3
  10. js 30分钟倒计时