Отображение индикатора выполнения во время извлечения архива SFX - PullRequest
1 голос
/ 18 мая 2010

Я пишу программу на C ++ и на собственном Win32 API. Я создаю процесс из архива SFX EXE в режиме без вывода сообщений, который не отображается пользователю. Но я хочу показать индикатор выполнения в моем приложении, пока извлекается архив SFX.

Как я могу это сделать?

Спасибо.

1 Ответ

1 голос
/ 18 мая 2010

Если процесс, который вы создаете, производит какой-либо текстовый вывод на стандартный вывод, то вы, вероятно, можете как-то проанализировать этот вывод и показать ход выполнения. Чтобы узнать, работает ли он, активируйте его в окнах командной строки и посмотрите, что вы получите от него.

win32 CreateProcess() позволяет перенаправить стандартный вывод процесса в канал. Таким образом, вы можете получить выходные данные, как только они будут получены.

Если процесс, который вы создаете, как-то не сообщает о своем прогрессе, то на самом деле вы мало что можете сделать. Вы можете попытаться найти функцию между размером файла и средним временем, необходимым для его извлечения, а затем подделать индикатор выполнения. Это поможет успокоить пользователя, но не более того.

Редактировать
Вызов CreateProcess() возвращается, как только процесс создан. CreateProcess() заполняет структуру PROCESS_INFORMATION дескрипторами процесса, который она создает. он содержит дескриптор основного потока процесса. Если вы хотите дождаться завершения процесса, вы можете WaitForSingleEvent() на том дескрипторе потока, который получает сигнал, когда поток завершается. Не забудьте CloseHandle() эти ручки, когда вы закончите с ними.

...