SharedObjectRegister("uo_thread",ls_thread)
的地方就不运行了(程序就卡在那里,查看系统进程该程序存在的)
注:
1、在PB编辑环境中没问题,运行正常
2、我已经将Sybase\Shared\PowerBuilder目录下的所有XXX.dll都拷贝到运行目录
12 个解决方案
#1
试一下定义一个 ErrorReturn 对象,捕获shareobjectregister() 的返回值,看看它是什么。
#2
代码段如下
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
i++
messagebox("uo_pbcomm register loop",string(gi_logsequence))
if i>16 then exit
loop
messagebox("","outloop")
运行时即没有进register loop 也没 outloop
但在PB调试中却正常,就是编译后不行
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
i++
messagebox("uo_pbcomm register loop",string(gi_logsequence))
if i>16 then exit
loop
messagebox("","outloop")
运行时即没有进register loop 也没 outloop
但在PB调试中却正常,就是编译后不行
#3
补充:
在循环前面还有一段调试:
messagebox("","start loop")
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
。。。。
loop
在循环前面还有一段调试:
messagebox("","start loop")
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
。。。。
loop
#4
多线程,不懂,有没有人能单开一贴晒晒PB多线程设计?
#5
没人指点啊?郁闷中……
#6
大至这样:
int i
ErrorReturn sErr
sErr = SharedObjectRegister("uo_thread",ls_thread) //如果是要用多线程,这里的 ls_thread 必须每次都是不同的值。
do
i ++
if sErr = SharedObjectExistsError! then SharedObjectUnregister ( ls_thread)
sErr = SharedObjectRegister("uo_thread",ls_thread)
loop while i > 3 or sErr <> Success!
#7
完了以后,还必须要:SharedObjectUnregister ( ls_thread)
#8
两个地方试试:
1,只开一个线程;
2,不要以Machine code(DLL) 方式编译程序,改用Pcode (PBD) 方式编译。
1,只开一个线程;
2,不要以Machine code(DLL) 方式编译程序,改用Pcode (PBD) 方式编译。
#9
帮忙顶下。。。。
#10
感谢wag_enu!
ls_thread每次运行是不同的,循环之前有代码段 ls_thread=ls_thread+string(i++)
现在回答你的两个问题:
1、只开一个是没有问题的
2、编译为pbd是没有问题的
但编译成dll就在创建第二个线程的地方锁住,即不报错也不运行。
ls_thread每次运行是不同的,循环之前有代码段 ls_thread=ls_thread+string(i++)
现在回答你的两个问题:
1、只开一个是没有问题的
2、编译为pbd是没有问题的
但编译成dll就在创建第二个线程的地方锁住,即不报错也不运行。
#11
前两天测试过了,编译为PBD 没问题是偶然试一下知道的。查了一通帮助,没有看到DLL 和PBD 的具体比较。
编译成DLL 和你的现象一样第二次注册就卡住了,PB 处理多线程本来就不强的。
编译成DLL 和你的现象一样第二次注册就卡住了,PB 处理多线程本来就不强的。
#12
既然如此,那只好结帖了,多谢!
#1
试一下定义一个 ErrorReturn 对象,捕获shareobjectregister() 的返回值,看看它是什么。
#2
代码段如下
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
i++
messagebox("uo_pbcomm register loop",string(gi_logsequence))
if i>16 then exit
loop
messagebox("","outloop")
运行时即没有进register loop 也没 outloop
但在PB调试中却正常,就是编译后不行
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
i++
messagebox("uo_pbcomm register loop",string(gi_logsequence))
if i>16 then exit
loop
messagebox("","outloop")
运行时即没有进register loop 也没 outloop
但在PB调试中却正常,就是编译后不行
#3
补充:
在循环前面还有一段调试:
messagebox("","start loop")
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
。。。。
loop
在循环前面还有一段调试:
messagebox("","start loop")
do while SharedObjectRegister("uo_thread",ls_thread)= SharedObjectExistsError!
。。。。
loop
#4
多线程,不懂,有没有人能单开一贴晒晒PB多线程设计?
#5
没人指点啊?郁闷中……
#6
大至这样:
int i
ErrorReturn sErr
sErr = SharedObjectRegister("uo_thread",ls_thread) //如果是要用多线程,这里的 ls_thread 必须每次都是不同的值。
do
i ++
if sErr = SharedObjectExistsError! then SharedObjectUnregister ( ls_thread)
sErr = SharedObjectRegister("uo_thread",ls_thread)
loop while i > 3 or sErr <> Success!
#7
完了以后,还必须要:SharedObjectUnregister ( ls_thread)
#8
两个地方试试:
1,只开一个线程;
2,不要以Machine code(DLL) 方式编译程序,改用Pcode (PBD) 方式编译。
1,只开一个线程;
2,不要以Machine code(DLL) 方式编译程序,改用Pcode (PBD) 方式编译。
#9
帮忙顶下。。。。
#10
感谢wag_enu!
ls_thread每次运行是不同的,循环之前有代码段 ls_thread=ls_thread+string(i++)
现在回答你的两个问题:
1、只开一个是没有问题的
2、编译为pbd是没有问题的
但编译成dll就在创建第二个线程的地方锁住,即不报错也不运行。
ls_thread每次运行是不同的,循环之前有代码段 ls_thread=ls_thread+string(i++)
现在回答你的两个问题:
1、只开一个是没有问题的
2、编译为pbd是没有问题的
但编译成dll就在创建第二个线程的地方锁住,即不报错也不运行。
#11
前两天测试过了,编译为PBD 没问题是偶然试一下知道的。查了一通帮助,没有看到DLL 和PBD 的具体比较。
编译成DLL 和你的现象一样第二次注册就卡住了,PB 处理多线程本来就不强的。
编译成DLL 和你的现象一样第二次注册就卡住了,PB 处理多线程本来就不强的。
#12
既然如此,那只好结帖了,多谢!