当前位置: 代码迷 >> PB >> yyoinge 进来,关于PB调用COM口有关问题
  详细解决方案

yyoinge 进来,关于PB调用COM口有关问题

热度:21   发布时间:2016-04-29 08:48:23.0
yyoinge 进来,关于PB调用COM口问题
我用了你的那个控件进行COM口数据收发,如果在w_main只有一个串口控件的话,一切正常,但如果我多增加几个(1个)控件,目的是每个控件监控一个串口,但当程序运行时候却无法打开w_main窗口。查看进程是存在的。

如何实现同时监控8个串口的数据?

------解决方案--------------------
那是因为在uo_pbcomm对象中用到线程导致的,在它的constructor事件中,进行SharedObjectRegister时,第二个控件的注册名与第一个一样了。

你在uo_pbcomm中这么修改
1、增加实例变量 Instance Variables 
private string is_instancename //线程实例名

2、增加共享变量 Shared Variables
int ii_instancename_xh = 0 //线程实例名序号 

3、constructor事件改成这样
C/C++ code
PortOpen=falseib_lock=falsestring ls_instancename = "pbcommobject"ii_instancename_xh ++ls_instancename = ls_instancename + string(ii_instancename_xh) do while SharedObjectRegister("uo_thread",ls_instancename) = SharedObjectExistsError!//将uo—thread对象注册为pbcommobject    ii_instancename_xh ++    ls_instancename = ls_instancename + string(ii_instancename_xh) loopSharedObjectGet(ls_instancename,uo_thread_pbcomm) //用uo—thread引用共享对象uo_thread_pbcomm uo_thread_pbcomm.of_setparent(this) //用中间对象给uo—thread中的实例变量赋值 uo_thread_pbcomm.Post of_start() //利用服务器推送技术,异步调用共享对象中的uf—start() is_instancename = ls_instancename