我工作的這一個Visual C++應用程序,以及部分運行時,「卡住」 depackitises文件,sinjce這可能需要一段時間,我實現了一個進度條,以反映depackitisation的進展。進度地沒有調試
使用調試程序運行時可以正常工作,但是當我運行時沒有調試程序或.exe文件時,進度條始終卡在中途(儘管程序完成其功能正常),然後跳轉到100 %。
通過進度條的值是獲得正確設置,我已經發現的價值的一些打印,但由於某些原因,這是不是在視覺上體現出來。
進度條更新的代碼是
while (mpeg.GetProgress() < 99){
Console::Write(this->progressBar->Value);
this->progressBar->Value = mpeg.GetProgress();
this->progressBar->Update();
Sleep(100);
}
這在程序主線程中完成的。 睡眠會阻止它更新太快,否則在控制檯中無法進行此操作。
這就需要跟蹤的功能是mpeg.Depackitise(),這是在一個單獨的線程中運行,這樣的進度條可以不斷更新,有關「進步」變量的代碼是:
double Mpeg::GetProgress() {
return Mpeg::progress;
}
void Mpeg::SetProgress(double prog) {
Mpeg::progress = prog;
}
以下代碼位於for循環中,它通過數據包遍歷整個文件包。 'packet'變量是當前數據包,'packet_count'是文件中數據包的總數,這些都是在單獨的mpeg.Depackitise()線程中完成的。
double Percent = 0.0;
Percent = ((double)packet/(double)packet_count);
SetProgress(Percent * 100);
如果任何人都可以建議一些解決方案來嘗試它將受到高度讚賞,這已經讓我討厭了一段時間了。我在網上發現的一些建議表示,使用未初始化的變量可能會導致運行帶/不帶調試之間的差異,但是我找不到任何未初始化的相關變量。
確保窗口的標題欄也更改爲「沒有響應」?當你的UI線程死亡時,這是Windows放置的幽靈窗口。不要阻止用戶界面。 –