現在有一個程式,做了大量的作業,需要增加一個功能,實時檢測網路狀態,如果斷網了,就切換到單機模式;然后繼續檢測網路,如果又重新連接了,就需要將資料庫的資料往上傳.請各位高人指點一二,有示例原始碼更佳,多謝.
uj5u.com熱心網友回復:
看看這個不知道是是不是PB8寫的下載:http://download.csdn.net/detail/zoomkey/7825937
uj5u.com熱心網友回復:
支持多執行緒,但像你這個問題,建議用另外一個exe來實作比較好,比較穩定。或者你也可以在timer事件里來處理
uj5u.com熱心網友回復:
把要異步呼叫的函式放在一個不可視物件使用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
uj5u.com熱心網友回復:
PB多執行緒的例子在論壇下載區隨便找找都有呢轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/40028.html
標籤:基礎類
上一篇:PB如何表示10的多次方
下一篇:mysql索引決議
