一个分时共用串口的问题,高分请教……
好几个应用程序要分时共用一个串口,我现在的解决办法是:
用信号量标记串口是否在使用,得到信号量的程序可以操作串口,没有得到的则等待。每次操作完都关闭串口,释放信号量。这样基本上能解决分时共用的问题。
但是当关闭串口后的空闲时间别的程序(其它程序)又能使用这个串口,这是不允许的,我要保证串口只能我的几个程序使用,请问如何能实现呢?帮我想个办法!!!
问题点数:100、回复次数:11Top
1 楼cris919(lovean)回复于 2002-04-02 18:52:51 得分 5
我想不出好办法
upupup
Top
2 楼ju_feng(NorthSky)回复于 2002-04-02 19:26:12 得分 15
要想不要别的程序用就要占用串口,可以在一个任务完成后不关闭串口,而是发送
一个消息通知其他几个程序声明串口可用,其他应用程序向该程序申请使用串口。Top
3 楼load(不是东西)回复于 2002-04-03 10:07:15 得分 0
ju_feng(NorthSky)的思路是可行的,我现在用的就是这种办法,只是每次都把串口关闭后用信号量通知其它程序串口可用,问题是:一个程序用完串口后不关闭,另外一个程序怎么操作串口?
高手请提供例程,急!!!!!!!!!!!Top
4 楼daiyq(代代)回复于 2002-04-03 10:17:45 得分 40
给你个思路:
不就是好几个程序都用串口吗?把操作串口功能单独拿出来作为一个单独的进程,只有这个单独的串口进程可以操作串口、负责串口的打开、关闭、接受和发送数据等,然后你的其它程序需要用串口时可以跟串口进程进行数据通讯,这样你的产口进程就可以独占串口,别人的程序肯定不能用串口。你自己的程序通过进程间通讯或者socket通讯随时可以利用串口了/。
不好意思,说的可能不清晰,但肯定可行。Top
5 楼load(不是东西)回复于 2002-04-03 13:16:04 得分 0
谢谢daiyq(代代) 及其他
我现在的困难是:操作串口是在一个动态库里进行的,动态库和程序的接口固定,上面几个程序都不能更改,只能改动态库。Top
6 楼daiyq(代代)回复于 2002-04-03 13:23:57 得分 0
你在动态库里一直占用者串口资源,这样别的程序就不能使用串口了,然后你接收到数据后在动态库里进行排队处理,这样不久行了。Top
7 楼load(不是东西)回复于 2002-04-03 17:52:19 得分 0
WIN32程序都有独立的内存页面,动态库没有并没有固定的进程和内存空间,怎么能一直占有串口呢,占有也只是调用此动态库的某一个程序占有,所有权在程序而不在动态库本身。
苦恼!!!Top
8 楼load(不是东西)回复于 2002-04-04 14:24:26 得分 0
就没有其它人帮我了吗?Top
9 楼longyii(【深渊上的缥缈】)(☆)回复于 2002-04-04 14:55:44 得分 20
你如果一定要在所有时间独占串口(包括你的进程不运行的时候),有一个笨办法:自己再创建一个进程P,让它独占串口,当你的程序加载dll并需要使用串口时,在dll内部与进程P通信,让它释放串口,当你使用完毕,再让P再次占有。当然如果串口在“释放-分配”的间隙被其他进程抢去,那就...我没法了,不会这么霉吧:)Top
10 楼slf(slf)回复于 2002-04-04 15:24:02 得分 20
用一个单独进程来实现串口的通信,几个程序分别与此进程通信(可以在你的dll中实现)然后再与串口通信,因为此进程一直占有串口资源,所以别的程序无法使用串口。
关键是每个程序并不需要真正操作串口,只在一处操作串口,其实tapi就是这种思想实现程序共享。Top
11 楼load(不是东西)回复于 2002-04-04 17:05:27 得分 0
感谢各位的帮助,这次的问题没发弄了,下次做我定按照你们的主意来
放分了!Top




