社区
PowerBuilder
帖子详情
pb 多线程的问题
zhanghua_1228
2009-04-28 09:05:25
我写了个pb的多线程的例子,就一个窗口,窗口里面是个进度条,
打开线程后,进度条就不停的在走。也达到多线程的目的,在窗口上做操作都没引响
不过在拖动窗口时,进度条会停下来,放掉之后也没一下子走一大段,也就是说线程也给停下了,这是为什么呢
用c写的多线程就没有这个情况
...全文
418
21
打赏
收藏
pb 多线程的问题
我写了个pb的多线程的例子,就一个窗口,窗口里面是个进度条, 打开线程后,进度条就不停的在走。也达到多线程的目的,在窗口上做操作都没引响 不过在拖动窗口时,进度条会停下来,放掉之后也没一下子走一大段,也就是说线程也给停下了,这是为什么呢 用c写的多线程就没有这个情况
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lujun1324
2011-08-05
打赏
举报
回复
up!up!看高手,学高手,变高手!
zhanghua_1228
2009-04-30
打赏
举报
回复
终于想到个办法把这个问题都解决
而且发现pb的SharedObjectUnregister并没有完全关掉线程,还要在destroy一下。
pb虽然能做到多线程,但对这多线程所支持的函数太少。所以用起来比较的麻烦,结贴!
zhanghua_1228
2009-04-30
打赏
举报
回复
[Quote=引用 18 楼 lzp_lrp 的回复:]
你不用全局变量,你不会用全局对象或者其它之类的?
肯定可以实现的
[/Quote]
全局的类,结构体,变量 都是取不到的
WorldMobile
2009-04-30
打赏
举报
回复
你不用全局变量,你不会用全局对象或者其它之类的?
肯定可以实现的
zhanghua_1228
2009-04-29
打赏
举报
回复
[Quote=引用 13 楼 sinlan 的回复:]
引用 11 楼 zhanghua_1228 的回复:
引用 8 楼 sinlan 的回复:
最近刚好做这个,不知道楼主的子线程怎么主窗口发送进度消息
我用的是sharedobjectregister创建线程,用send()向主窗口发送进度消息(这可是我花了几天时间弄出来的,那个累啊...)
楼主能不能不你的方案拿出来分享一下?
自己写一个类做为一个通讯的类
能说一下主要用到哪些东西吗?
[/Quote]
你看一下这个例子
http://www.builder.com.cn/2007/1023/575138.shtml
他里面是怎么向主窗口发送信息的
sinlan
2009-04-29
打赏
举报
回复
[Quote=引用 11 楼 zhanghua_1228 的回复:]
引用 8 楼 sinlan 的回复:
最近刚好做这个,不知道楼主的子线程怎么主窗口发送进度消息
我用的是sharedobjectregister创建线程,用send()向主窗口发送进度消息(这可是我花了几天时间弄出来的,那个累啊...)
楼主能不能不你的方案拿出来分享一下?
自己写一个类做为一个通讯的类
[/Quote]
能说一下主要用到哪些东西吗?
WorldMobile
2009-04-29
打赏
举报
回复
用个全局变量之类的东东gb_exit = false
do while tru
if gb_exit then exit
loop
然后在程序里赋值结gb_exit
zhanghua_1228
2009-04-29
打赏
举报
回复
[Quote=引用 8 楼 sinlan 的回复:]
最近刚好做这个,不知道楼主的子线程怎么主窗口发送进度消息
我用的是sharedobjectregister创建线程,用send()向主窗口发送进度消息(这可是我花了几天时间弄出来的,那个累啊...)
楼主能不能不你的方案拿出来分享一下?
[/Quote]
自己写一个类做为一个通讯的类
zhanghua_1228
2009-04-29
打赏
举报
回复
现在呢,我这个拖动会停住这个问题是解决了,
原线程里面我是调用一个我写的通讯的类的函数来确定是否要停,在拖动窗口的时候这个类的函数定下了,导至线程停下
如果在线程里不做判断,就可以了,不过也出现个问题,线程关不掉,有冰刃看,线程一直在运行,
SharedObjectUnregister函数返回是成功的,但线程还在,是不是因为线程内就是一个do while true 的死循环的原因?
zhanghua_1228
2009-04-29
打赏
举报
回复
[Quote=引用 16 楼 sinlan 的回复:]
这个啊,看了,他这个主线程向子线程索取当前进度,而非子线程主动向主线程发送当前进度
当子线程正在做一项工作,会造成子线程无响应(比如打开某个硬件设备),这时候如果主线程向子现成索取进度,那么主线程也会处于无响应状态
而子线程主动向主线程发送当前进度就不会发生类似的问题了.
[/Quote]
。。。。。
他不是‘主线程向子线程索取当前进度’,而是 uo_thread线程向中间类uo_argv发送个消息,uo_argv再向窗口发送当前的进度
所有的消息都是从低向高发送的,你再看下
sinlan
2009-04-29
打赏
举报
回复
这个啊,看了,他这个主线程向子线程索取当前进度,而非子线程主动向主线程发送当前进度
当子线程正在做一项工作,会造成子线程无响应(比如打开某个硬件设备),这时候如果主线程向子现成索取进度,那么主线程也会处于无响应状态
而子线程主动向主线程发送当前进度就不会发生类似的问题了.
zhanghua_1228
2009-04-29
打赏
举报
回复
[Quote=引用 12 楼 lzp_lrp 的回复:]
用个全局变量之类的东东gb_exit = false
do while tru
if gb_exit then exit
loop
然后在程序里赋值结gb_exit
[/Quote]
这个是不行的
线程里是可以取不到全局变量的值
你在程序里改gb_exit = false
但线程里gb_exit还是他的初始值
WorldMobile
2009-04-28
打赏
举报
回复
[Quote=引用楼主 zhanghua_1228 的帖子:]
我写了个pb的多线程的例子,就一个窗口,窗口里面是个进度条,
打开线程后,进度条就不停的在走。也达到多线程的目的,在窗口上做操作都没引响
不过在拖动窗口时,进度条会停下来,放掉之后也没一下子走一大段,也就是说线程也给停下了,这是为什么呢
用c写的多线程就没有这个情况
[/Quote]
放掉之后也没一下子走一大段,也就是说线程也给停下了,如果真的没有走一大段,那线程应该是停了
不知道你用的什么方法来实现的多线程,建议你用PB的timing控件,用timer事件的话,做不出多个线程了,用N个timing控件,可以模拟出多线程的效果
zhanghua_1228
2009-04-28
打赏
举报
回复
如果写成多线程应该怎么写
rightyeah
2009-04-28
打赏
举报
回复
是用timer事件吧
timer事件是可以被合并的。
当窗口在拖动的时候,窗口上的事件被阻塞,多个timer事件就会在消息队列里面合并成一个。
zhanghua_1228
2009-04-28
打赏
举报
回复
问题就是 他没走一大段 还是在原来停的地方继续走
hxbkkk
2009-04-28
打赏
举报
回复
在拖动窗口时,进度条会停下来,放掉之后也没一下子走一大段m,证明还是在动,只是窗口没有刷新而已
hxbkkk
2009-04-28
打赏
举报
回复
这个要看你的代码了
sinlan
2009-04-28
打赏
举报
回复
最近刚好做这个,不知道楼主的子线程怎么主窗口发送进度消息
我用的是sharedobjectregister创建线程,用send()向主窗口发送进度消息(这可是我花了几天时间弄出来的,那个累啊...)
楼主能不能不你的方案拿出来分享一下?
desegou
2009-04-28
打赏
举报
回复
PB不支持多线程,如果进度条要中断可以用yield函数实现
加载更多回复(1)
PB
多线程
实现
包含
PB
9
PB
12.5和
PB
.NET
多线程
的实现方法
PB
多线程
例子,
PB
源码
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码
ELK/ELFK(7.3 ) 企业
PB
级日志系统实战
包含的组件有Filebeat,Logstash,Elastic,Kibana等 本堂课引入Kafka 让Elastic Stack 能适应企业
PB
级的业务日志量 并弥补传统ELk架构的不足 ★ 学完这门课程会获得什么? 首先从零开始教你部署Elastic...
pb
多线程
示例
pb
11.5
多线程
示例
pb
多线程
处理,全部源码
pb
多线程
处理的全部源码,能实现windows
多线程
工作方式。
PowerBuilder
1,075
社区成员
66,437
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章