| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2546 人关注过本帖
标题:重叠 I/O 事件不在信号状态中
只看楼主 加入收藏
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
有时候需要非阻塞读写,如果不用异步读写可以做到这样么?
2014-06-02 11:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
串口硬件是不容許并行的,所有讀寫都衹能在單個時刻中進行,而并行任務不能確保多個綫程不同時對該硬件操作,必須設置一個信號狀態,告訴別的綫程你(某個綫程)當前正在占用串口,請等待我操作完成你再操作(因爲這種讀寫操作不能瞬間完成)。對這種硬件而言,多綫程實際上是假的。

[ 本帖最后由 TonyDeng 于 2014-6-2 11:54 编辑 ]

授人以渔,不授人以鱼。
2014-06-02 11:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不用想了,串口必須阻塞。

授人以渔,不授人以鱼。
2014-06-02 11:56
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
串口肯定是可以同时进此读和写(读写数据线是单独的),只是不能同时读 或 同时写
我也并没有2个线程同时去读
2014-06-02 11:56
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
如果当前读不到数据,就直接返回,这肯定是可以的。
但是Windows下的API我不怎么会用。
2014-06-02 11:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你自己知道沒有同時讀寫,用異步操作幹嘛!操作系統對異步調用,它會理你有沒有同時嗎?它對異步函數就需要有這種信號標志,才能執行異步讀寫請求。明知不會是并行的操作,根本就不需要用異步機制,多綫程不是那麽好玩的,沒有很多人想象中那麽高效。Jeffrey Richter對多綫程并行操作的機制有深入分析,有空看看再寫這種程序吧。

授人以渔,不授人以鱼。
2014-06-02 12:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我衹能簡單地告訴你一句話:Windows下的程序(subsystem=windows)與subsysten=console下的,執行機制完全不同,前者是由操作系統調動程序代碼執行的,而後者是程序代碼調用操作系統資源執行任務的,編程思維截然相反,用後者的思路去寫前者的程序,當然容易碰壁。

授人以渔,不授人以鱼。
2014-06-02 12:05
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
但读和写可能要同时进行,并且读的话要 驱动接受到了多少数据就读出多少数据,不要阻塞
2014-06-02 12:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用wfoo在2014-6-2 12:05:26的发言:

但读和写可能要同时进行,并且读的话要 驱动接受到了多少数据就读出多少数据,不要阻塞

已經說了,硬件不允許。不再重複回答了。

授人以渔,不授人以鱼。
2014-06-02 12:06
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
串口读有一根数据线, 写有另一个数据线,怎么可能不允许。
这两根线不冲突,所以肯定允许,对于串口的控制寄存器读写都是不同的,也不会冲突。
2014-06-02 12:10
快速回复:重叠 I/O 事件不在信号状态中
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026766 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved