PB8是否支持多线程操作

monkey_li 2014-11-17 11:14:47
现在有一个程序,做了大量的工作,需要增加一个功能,实时检测网络状态,如果断网了,就切换到单机模式;然后继续检测网络,如果又重新连接了,就需要将数据库的数据往上传.请各位高人指点一二,有示例源码更佳,多谢.
...全文
394 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wixinyoyo 2014-11-20
  • 打赏
  • 举报
回复
PB多线程的例子在论坛下载区随便找找都有呢
sbks 2014-11-20
  • 打赏
  • 举报
回复
把要异步调用的函数放在一个不可视对象 使用sharedobjectregister与sharedobjectunregister这对函数即可实现多线程管理 具体例程参见网络上众多的示例 不方便的地方: 1.一般要自行做好超时管理,不然,等待结果时极容易死循环 2.自己做好线程的管理,不然,也会有莫名其妙的错误 理解完PB的线程,绝大部分的多任务都可以处理了. 比如,of_getinfo_network()被定义在nvo_thread对象中,这是用来完成工作任务的,工作结果可以存放在nvo_thread的一个共享变量is_rn. 你或许需要在nvo_thread中定义一个of_get_rn()的函数,用来取回结果.在这个取结果的过程里,要检查是否超时,如果不超时,并且is_rn有值,则返回is_rn;如果超时,则返回超时信息 大致的应用流程是这样的 nvo_thread thread //线程变量,用来操作抓取出来的线程实例 string ls_threads[] //线程名字数组,用来记录线程名字.线程的管理都是基于线程名字的 .... //多线程调用 for i = 1 to ll_Rc //登录线程名字 ls_thread[i] = string(i) //假定线程名字就是序号.当然,这个名字的规则由你定 //注册线程:把线程名字注册成nvo_thread实例 sharedobjectget('nvo_thread',ls_thread[i])) //根据线程名字取回线程实例,并异步调用 sharedobjectget(ls_thread[i],thread) thread.post of_getinfo_network() next //此时,若干个线程已经在运行了,而且,可能有些已经有结果了,需要通过一个循环来取回结果 for i = 1 to ll_rc //根据线程名字取回线程 sharedobjectget(ls_thread[i],thread) do while thread.of_get_rn()<>'xxxooo' //在这里很关键,总之这个过程要有超时管理,不然,一不留神就会陷入死循环了.我是把超时计算放在of_get_rn()里,但你也可以通过其它的方法,目标只有一个,不要让取结果成为死循环 yield() loop ...... //根据线程名字,取消线程.因为线程要么是超时,要么是有结果,不管如何,都要把它取消掉 sharedobjectunregister(ls_thread[i]) next
WorldMobile 2014-11-18
  • 打赏
  • 举报
回复
支持多线程,但像你这个问题,建议用另外一个exe来实现比较好,比较稳定。 或者你也可以在timer事件里来处理
bombshell 2014-11-17
  • 打赏
  • 举报
回复
看看这个不知道是是不是PB8写的 下载:http://download.csdn.net/detail/zoomkey/7825937

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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