Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.08;
Скачать: CL | DM;

Вниз

Ускорение запуска консольной проги.   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2002.07.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
3-23474
angelcom
2002-06-15 11:07
2002.07.08
Help my!!! Требуется помощь....


1-23583
Боева Наталья
2002-06-24 04:27
2002.07.08
отчет в word


1-23547
Programmer1
2002-06-26 11:24
2002.07.08
Управление word ом из приложения


3-23525
Nicolas_
2002-06-18 12:41
2002.07.08
Как заполнить combobox типами полей?


14-23772
Nevercomes
2002-06-07 23:24
2002.07.08
GTA 3 WinXp+Nvidia GeForse = с графикой проблемы!!!