重叠操作的实质是什么?欢迎讨论指正

iamwjp 2005-12-20 05:07:40
重叠操作的实质是什么?在写完一个串口读写程序后,我一直在思考这个问题。个人理解是在进行读或写同时可以进行其他的操作,包括读写、写读重叠。

但实验的结果未能达到预期。比如:
WriteFile(cmd1);
WriteFile(cmd2);
ReadFile();

无论怎样都得不到cmd2的处理结果。后来反思了一下,想会不会是只是一条数据线进行收发,其他都是信号线(当然我对硬件了解不多)?如果是这样就可以直观的理解为什么收不到cmd2的结果。
DTE....cmd1....DCE....ret1....占线,等候DTE接收
DTE....cmd2....DCE,此时占线,应该失败,但WriteFile无失败信息

DTE: PC
DCE: Motorola 388c

如果假设成立的话,所谓的重叠就不能有读写重叠,即在同一个连接上只能同时进行一个任务,那么有无必要单独开线程读取?
重叠机制带给我们的最大益处仅仅是同时处理其他非读写任务吗?

抛砖引玉,望踊跃发言。
...全文
245 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AthlonxpX86 2005-12-28
  • 打赏
  • 举报
回复
重叠操作的实质是信号量操作,用于多任务多线程的任务同步,比如串口发送数据比较慢,这时候,你设置串口时有个等待时间,这个时间就是定时检查串口数据传输操作,传输完了,就设置信号量叫WaitSigeObject之类的函数返回继续运行,否则WaitSigeObject就会一直堵塞致使该线程处于就绪,这样就提高了效率
alphapiao 2005-12-27
  • 打赏
  • 举报
回复
同一外设同一时间只能处理一个命令,就算是重叠IO也是一样。
cici2006 2005-12-23
  • 打赏
  • 举报
回复
学习
iamwjp 2005-12-22
  • 打赏
  • 举报
回复
谢谢up
csharp_snail 2005-12-21
  • 打赏
  • 举报
回复
现在都是用WSARecv和WSASend了
zhaohonghua 2005-12-21
  • 打赏
  • 举报
回复
难道单个线程就不能使用重叠操作吗
gohappy_1999 2005-12-21
  • 打赏
  • 举报
回复
重叠操作就是异步操作吧
iamwjp 2005-12-21
  • 打赏
  • 举报
回复
当然可以了,单线程是多线程的一个特例
iamwjp 2005-12-20
  • 打赏
  • 举报
回复
A port open for overlapped operations allows multiple threads to{do I/O operations at the same time}and {perform other work} while the operations are pending.

这样理解是否正确

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧