关于PB多线程开发的问题?

路人甲cw 2011-08-03 04:34:10
在主线程中,如果一个函数正在执行的同时去执行另一个函数没有什么问题,但如果是用SharedObjectRegister创建的一个子线程,在子线程正在执行函数的时候就只能用POST关键字去执行下一个函数,假如不用POST去执行的话子线程就会死锁,请问这是PB本身的原因吗?

例子:
--------
在cb_1中代码如下:

uo_1.SomeMethod()

在cb_2中代码如下:

uo_1.SomeMethodElse() //如果uo_1在主线程中,uo_1.SomeMethod()还没有执行完可以加Post也可以不加
uo_1.Post SomeMethodElse()//如果uo_1是在子线程中,uo_1.SomeMethod()还没有执行完就只能这样写,否则程序会死掉
...全文
152 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人甲cw 2011-08-03
  • 打赏
  • 举报
回复
另外,我发现线程与线程之间资源是相互独立的,就算是同一个类,类中有共享变量也是一样
路人甲cw 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yyoinge 的回复:]

一个新的PB线程通过使用SharedObjectRegister()函数来产生。 但是要让线程异步执行,必须使用PowerScipt的POST语句(如inv_shared.POST of_primeNumbers(1,1000))。如果执行一个共享对象的方法(函数或事件),而没有使用POST关键字,该方法将在一个新的线程中执行,需要等它执行完成之后才会执行调用该方法的脚本的下一个语句。 ……
[/Quote]
这个我看过,是不是一定要增加到调用线程的消息队列中,这点描述得不是很清楚,直接调用是不是一定会出错?PB的这个线程原理我还是不太明白
yyoinge 2011-08-03
  • 打赏
  • 举报
回复
一个新的PB线程通过使用SharedObjectRegister()函数来产生。 但是要让线程异步执行,必须使用PowerScipt的POST语句(如inv_shared.POST of_primeNumbers(1,1000))。如果执行一个共享对象的方法(函数或事件),而没有使用POST关键字,该方法将在一个新的线程中执行,需要等它执行完成之后才会执行调用该方法的脚本的下一个语句。 当使用POST方法时时,PB将会把对该方法的调用加入到对象的事件队列之中,然后马上就返回。在大多数情况下,当前脚本执行完成之后就会执行对方法的调用。由于方法的返回值在调用方法的脚本是不可用的,因此这类方法一般来说都没有返回值,然而,如果它有返回值的话,将会被忽略,而不会发生错误。

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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