Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-23768
PTE
2002-06-04 16:05
2002.07.08
Долго загружается приложение, как можно его


14-23787
Agent Smith
2002-06-08 20:29
2002.07.08
Пространство Сети...


1-23553
Navigor
2002-06-26 19:02
2002.07.08
Про буфер обмена WIN 98


1-23573
SergeyAndreichikov
2002-06-27 09:33
2002.07.08
Как использовать проинсталированные компоненты?


1-23668
cher_gvf
2002-06-26 13:12
2002.07.08
Как узнать код ошибки EInOutError ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский