Форум: "WinAPI";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
ВнизУскорение запуска консольной проги. Найти похожие ветки
← →
Olgerd (2002-05-09 15:29) [0]В моей программе очень часто надо запускать консольный архиватор для распаковки некоторых файлов. Это занимает 1-2 секунды, и соответственно программа притормаживает на 1-2 секунды, а такую операцию в программе надо выполнять очень много раз.
Можно ли как-нибудь ускорить запуск консольной проги(я использую CreateProcess для запуска)?
← →
ZZ (2002-05-09 17:04) [1]Olgerd
Создай для этого новый поток.
← →
Olgerd (2002-05-09 17:16) [2]В смысле?
Я вот так запускаю консольную прогу с помощью этой функции:
Function RunExeParam(ExeFile: String; Visibility: integer = 1; Wait: Boolean = false): boolean;
Var StartupInfo: TSTARTUPINFO; pi: PROCESS_INFORMATION;
Begin
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb:=Sizeof(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=Visibility;
If Not CreateProcess(Nil,PChar(ExeFile),Nil,Nil,False,0,Nil,Nil,StartupInfo,pi) Then
Begin
Result:=False;
Exit;
End;
If Wait Then WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
Result:=True;
End;
Здесь вроде создаётся новый поток.
← →
ZZ (2002-05-09 18:06) [3]function NewThread(P:Pointer):Cardinal;stdcall;
var
si,pi...
begin
...
CreateProcess(...);
...
end;
var
ThID : Cardinal;
Ptr : Pointer;
Теперь вызывая
CreateThread(nil,0,@NewThread,Ptr,0,ThID);
Будет запускаться новый поток,а программа будет работать дальше - тормозить при запуске CreateProcess будет именно новый поток.
В Ptr можно поместить указатель PChar на имя файла для запуска.
Естественно просто WaitForSingleObject(pi.hProcess,INFINITE); смысла иметь не будет - она приостановит поток, но не процесс.
ЗЫ. А может тормозит именно WaitForSingleObject(pi.hProcess,INFINITE); ???
← →
ION T (2002-05-09 21:42) [4]Скорее всего тормозит именно создание консольного окна при каждом запуске разархиватора. Шоб ускорить, создаешь свою консоль (AllocConsole()) и в CreateProcess() устанавливаешь флаг fInheritHandles. Сразу-же и избавляемся от мелькания досовских окон:)))
← →
Olgerd (2002-05-10 00:03) [5]
> ZZ © (09.05.02 18:06)
Так мне надо дождаться пока прога отработает, т.е. именно WaitForSingleObject пока файл распакуется. И запускаю я её скрытой, чтоб Dos-окна не мелькали.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c