Я работаю над приложением Visual C ++, и часть этого процесса депакцитирует файл, так как это может занять некоторое время, когда я реализовал индикатор выполнения, чтобы отразить прогресс депапитизации.
Это прекрасно работает при работе с отладчиком, однако, когда я запускаю без отладчика или из файла .exe, индикатор выполнения постоянно застревает на полпути (хотя программа прекрасно выполняет свою функцию), а затем переходитдо 100%.
Путем некоторой печати значения индикатора выполнения я обнаружил, что значение устанавливается правильно, но по какой-то причине это не отражается визуально.
Коддля индикатора выполнения есть
while (mpeg.GetProgress() < 99){
Console::Write(this->progressBar->Value);
this->progressBar->Value = mpeg.GetProgress();
this->progressBar->Update();
Sleep(100);
}
Это делается в главном потоке программ.Спящий режим не позволяет обновляться слишком быстро, так как в противном случае это невозможно выполнить в консоли.
Функция, которая требует отслеживания, называется mpeg.Depackitise (), она запускается в отдельном потоке, чтобы индикатор выполнения могПри постоянном обновлении код, относящийся к переменной «progress», выглядит следующим образом:
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);
Если кто-то может предложитьНекоторые решения, чтобы попробовать это было бы высоко ценится, это уже давно меня раздражало.В некоторых предложениях, которые я нашел в Интернете, говорилось, что использование неинициализированных переменных может привести к различиям между запуском с / без отладки, однако я не могу найти релевантные переменные, которые не были инициализированы.