網路檔案 如:http://127.0.0.1/cd/xx.pdf
當網路斷開 或者 網路檔案服務器下載速度很慢時 主程式會一直卡在那里 界面假死 ,如何設定判斷這種情況 使其放棄本次下載 繼續下載下一個 檔案? 請給予思路
uj5u.com熱心網友回復:
建議將下載放入一個執行緒中,在執行緒中,設定超時時間,超時就退出。最好,將超時時間與檔案大小相關,這樣更合理。
uj5u.com熱心網友回復:
用執行緒處理。設定超時uj5u.com熱心網友回復:
樓上2位 大牛 怎么在執行緒里面 設定超時 給點示例 沒搞過 也搜不到uj5u.com熱心網友回復:
放到執行緒 俺會 怎么設定超時uj5u.com熱心網友回復:
這是微軟的一個BUG,微軟給出的方案就是放到一個執行緒里uj5u.com熱心網友回復:
通過執行緒就不用管超時了,完事自動關閉執行緒,
而且不影響主執行緒,不會有卡的感覺
uj5u.com熱心網友回復:
放到執行緒中用WinInet中的API控制分塊下載,絕大數服務器都支持斷點續傳。uj5u.com熱心網友回復:
我是 多個檔案 依次下載 如果執行緒中由于網速 一直等待下載完成 那么 會造成 等待我是回圈單個檔案下載 下載放到多執行緒 一個執行緒結束 開始下載另一個檔案
如果一個檔案很慢 可能要等很長時間 有沒有更優的方案
uj5u.com熱心網友回復:
有時 一個 Pdf 1-2Mb 結果下載等待 一兩個小時 如何在執行緒里面 設定超時 ? 繼續求uj5u.com熱心網友回復:
他們不是說 你下載執行緒設超時了!是你用另一個執行緒 去監督你的下載執行緒,
我倒可以給你提供一個思路,,,
現有執行緒 A(下載者), B(監督者,可以監督多個),計時器(Stopwatch)
1.單一個下載者被啟動,,讀取計時器的值作為這個下載者的活動戳
2.當回呼被呼叫,讀取計時器的最新值作為這個下載者的活動戳
3.監督者總是不斷,使用計時器的當前值,去對比各個下載者的活動戳
4.如果超過了 指定時間,則盤點為超時或者出問題了,,直接終止目標下載者
uj5u.com熱心網友回復:
MSDN: Microsoft WinHttp Reference有C#的示例,很容易實作。
uj5u.com熱心網友回復:
lpfnCB引數 BINDFBINDF_ASYNCSTORAGE
Value that indicates that the client application calling the IMoniker::BindToStorage method specifies that the storage objects and stream objects returned from the IBindStatusCallback::OnDataAvailable method return E_PENDING when the objects reference data that is not yet available through the IStream::Read method, instead of blocking until the data becomes available. This flag applies only to BINDF_ASYNCHRONOUS operations.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/76058.html
標籤:VCL組件開發及應用
