現有一檔案,需要顯示其進度狀態,涉及到呼叫c++底層的exe,然後與c++ 進行 socket 通訊獲取返回值,其中包含進度
處理邏輯: 前端介面寫入一筆資料,服務中線程一進行監聽,(更改資料狀態後)並呼叫exe,另一線程監聽socket 返回值,根據關鍵字解析後將進度更新其中,最後web前端按照固定時間去表中讀取進度後賦值給ui即可。
<body
>
<
script
>
$(function
() ,
function
(data) ;
}, "json");
}if(subpos =="
-1")
if(subpos =="
100"
) ,
function
(data) ,
"json");
//$.ajaxsettings.async = true;
} }
varsub;
$("#btngetpos
").click(
function
() );
})script
>
<
div>
<
span
>進度
span
>
<
progress
max="100"
value
="0"
id="prog"
style
="display:none"
>
progress
>
<
span
id="spe"
>
span
>
div>
<
input
type
="button"
id="btngetpos"
value
="獲取進度"
/>
body
>
單一刷進度的話,沒啥,就是將進度值付給 progress 標籤的 value屬性值(html5),然後判斷進度值,不為-1到100 則查詢並賦值,為-1則失敗,為100則成功,這裡需要注意的是要把進度值為 [1,100) 的賦值寫在最前面,因為ajax 是非同步的,如果寫在後面的話,會出現進度異常,除非把賦值的ajax 改成同步 ($.ajaxsettings.async = false; ajax .... ; $.ajaxsettings.async = true;),這是乙個坑.
還要考慮一種情況, 比如進度正在重新整理時,服務突然停止或者資源沾滿等原因,進度則會長時間停留在某一固定值中,體驗感很差。這是就需要設定乙個時間點,來計算當前進度和上一次進度如果一樣,則開始計時,超過一定時間仍然一樣,則判斷當前任務執行失敗。於是做了如下處理
//計算時間差 當前進度/上一次進度/檔案id/任務id
function
countminudate(taskpos, tppos, videoid, taskid)
}else
}
這裡當出現當前進度和上次進度相同時,呼叫此方法,並計算次數,注意,如果不相同,需要清零計數變數,同樣在超過3秒後(10*3000),計數變數仍然需要清零。然後在之前的獲取進度的方法體中呼叫此方法即可。
if (subpos != "-1" && subpos != "100") , function(data) ;
}, "json");
}
至於用在專案中的話,肯定還需要考慮正在重新整理進度的時候,關閉介面,然後在重新進來,這時,需要在介面時初始化的時候,多加乙個判斷,是否有任務,若有,先查詢進度值,或正常,或失敗,或完成。根據不同的狀態值,再執行各自的方法即可
任務處理進度條顯示
var xyz createbar total width,total height,background color,border width,border color,block color,scroll speed,block count,scroll count,action to perf...
補上週一的進度條進度條
進度條 行數 80 24 104 部落格字數 103 365 487 187 1142 知識點c stl簡單的異常處理 psp 一.詞頻統計 c類別c內容 s開始時間 e結束時間 i時間間隔 t淨時間 分析需求分析 8 00 9 10466 編碼編寫 9 20 17 38 1206小時 除錯除錯執行...
進度條的實現
1 實現要求 的數量在不斷地增加,後面的數字也隨著增加,圖示不停地在旋轉 2 用到的基礎知識 n 換行 lf 將當前位置移到下一行開頭 r 回車 cr 將當前位置移到本行開頭,每次游標會回到行首 代表乙個反斜線字元 0 空字元 null 3 程式的實現 index裡面是圖示的實現,100s 是左端對...