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

Вниз

Task Manager? Как его сделать многозадачным?   Найти похожие ветки 

 
Filat ©   (2002-10-11 19:52) [0]

Привет ALL!
Вопрос вот какого плана. Сделал я свой Task Manager. Может запускать до 5-ти задач. Я его вставил в стандартный виндовый и поставил проверку на единственность запуска, чем так сказать повысил стабильность запуска других задач. Но в процессе его работы столкнулся с глюками, которые на моём компе не проявляются. Итак:
1. После запуска моего Task Manager стартуют 5 задач. Когда в процессе их работы пользуются Far-ом или ещё чем-то, т.е. запущенные задачи, почемуто теряется ...ну как его...ID процесса или ещё чего-то, в общем, при автоматическом закрытии потом этих приложений они не закрываются а работают. Через интервал - снова запуск и у меня 10!!! работающих приложений.
Запуск делаю так:
StartEn1:= False;
StartEn1:=CreateProcess(nil, PChar(Dir2.Text), nil, nil, FALSE, Create_New_Console, nil, nil, StartupInfo1, ProcessInfo1);
Закрытие так:
if StartEn1 then
begin
ProcessInfo1.hProcess:=OpenProcess (Process_Terminate, False, ProcessInfo1.dwProcessId);
if ProcessInfo1.hProcess <> 0 {Null} then
begin
TerminateProcess(ProcessInfo1.hProcess, 0);
CloseHandle(ProcessInfo1.hThread);
CloseHandle(ProcessInfo1.hProcess);
end;
end;
Как сделать чтобы небыло повторных запусков?

2. Ввод данных для запуска процессов делаю через Edit. А как (при помощи чего) можно сделать чтобы это число я мог менять автоматически, скажем 5-8-15... Если пользоваться типа StringGrid-ом, то как мне определить, что пришло время запустить именно этот процесс, а не другой? И как тогда строить конструкцию CreateProcess если я не знаю сколько их будет?
Мне это надо для 100%!!!! точного создания разных архивов, пока знаю, что из >12, в разных местах сети + распределение их по дням недели, дате и т.д. а потом уже ручками сносить пишушие на блины, т.е. задачи в основном будут досовские. Хотя может придётся купить и ZIPTV.
Спасибо, очень надеюсь на помощь!!!


 
Дремучий ©   (2002-10-12 00:10) [1]

Как сделать чтобы небыло повторных запусков?
В приложении Делфи есть
1)AplicationTerminate
2)AplicationTerminated
Логично предположить что и для процессов есть подобная проверочная функция.

А как (при помощи чего) можно сделать чтобы это число я мог менять автоматически, скажем 5-8-15...
можно сразу делать через TTable и TDbGrid - создаешь подходящую структуру и вперед с песней... Введенные процессы сохраняться для последующих запусков. Не набивать же их каждодневно или ежечасно? :))

И как тогда строить конструкцию CreateProcess если я не знаю сколько их будет?
по таймеру (например, каждых 5 сек) пробегаешься по всех записях таблицы и анализируешь что надо, если событие наступило - запускаешь процес. Используешь конструкцию
while not Table1.eof
do begin
.....

Table1.Next;
end;



Гуд лак
:))





 
Filat ©   (2002-10-14 19:48) [2]

Проверить какие приложения запущены, это можно. Но как сделать следующее:
1.На данный момент я запускаю одно и тоже приложение 4 раза, но при помощи батника. Настройка каждого из них идёт на порты с 1 по 4-й. Так вот, как узнать перед очередным цыклом запуска, что предыдущие остались, а не новое было запущено.
Запуск происходит так: 1-й CreateProcess - 10 сек. пауза, 2-й CreateProcess, 10 сек. пауза и д.т. до 4-го.
2. А если их (приложений) будет много и разных, как проверить до запуска, что оно запущено уже или ещё? Может можно определить откуда идёт запуск и потом от этого отталкиваться?


 
Filat ©   (2002-10-15 21:51) [3]

Ну подскажите пожалуйста. :))


 
Дремучий ©   (2002-10-15 22:42) [4]

сразу признаюсь - код не мой. :))
но этот пример должен тебе помочь
см. GetExitCodeProcess


procedure TfDisksRead.RunUnArch;
var
StartupInfo : TSTARTUPINFO ;
RarProcessInformation,
UtilProcessInformation:TProcessInformation;
fLoad : Boolean;
ecode : DWORD;
fl:TFileStream;

begin
With ArcLabel do begin
Caption:="Зачекайте ..";
Width:=fDisksRead.ClientWidth;
Visible:=True;
end;
Repaint;

// файл для протокола
fl:=TFileStream.Create(ProtName,fmCreate);

try

GetStartupInfo(StartupInfo);
StartupInfo.dwFlags := STARTF_USESTDHANDLES;
//StartupInfo.hStdOutput:=fl.Handle;
StartupInfo.hStdError:=fl.Handle;


// почистить католог для разархивирования
DelDir(CurDir);


// разархивировать информацию
StartupInfo.dwFlags := StartupInfo.dwFlags or STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=SW_SHOWMINIMIZED;
fLoad:=CreateProcess(nil,pchar(Format(cmdLine,[ArcDir,CurDir])),nil,nil,False,
0,nil,nil,StartupInfo,RarProcessInformation);
repeat
sleep(100);
GetExitCodeProcess(RarProcessInformation.hProcess,ecode);
until ecode<>STILL_ACTIVE;

if ecode<>0 then
begin
Application.MessageBox("Ошибка разархивирования","Ошибка",MB_OK);
exit;
end;

// запустить файл на выполнение
StartupInfo.hStdOutput:=fl.Handle;
fLoad:=CreateProcess(pchar(CurDir+"update.bat"),nil,nil,nil,False,
0,nil,pchar(CurDir),StartupInfo,UtilProcessInformation);

ShowMessage("Поновлення закiнчилось успiшно");

finally
fl.Free;
sleep(2000);
CopyProtokol;
ArcLabel.Visible:=False;
end;
end;



 
Filat ©   (2002-10-16 20:28) [5]

Дремучий, я извиняюсь, но частично разобрался в приколе.
Я не сказал вот что, что моя прога запускает 4-е приложения не на прямую а через батник, т.е. моя прога - батник (появляется дос окно) - приложение, не удивительно наверное, что теряется ID процесса, т.к. оно запоминает ID дос окна.
млин...


 
pusrg ©   (2002-10-16 21:07) [6]

Для определения запущено ли какое-то приложение можно использовать мютексы, где-то в факе есть пример, сам им пользовался.


 
Дремучий ©   (2002-10-16 21:30) [7]

>>pusrg
ну, допустим, запустил прогу - поставил ПОПУТНО мютекс(прога то чужая), а как знать когда она отработала, чтобы снять мютекс?


 
Polevi ©   (2002-10-17 13:02) [8]

поток создать специальный и делать в нем WaitForMultipleObjects для хендлов запущенных процессов



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.011 c
14-93192
Lony
2002-11-09 12:51
2002.11.28
Выделение текста


1-93123
X-Guest...
2002-11-14 21:56
2002.11.28
Помогите... Help...


6-93163
Term
2002-10-02 12:20
2002.11.28
сети


14-93186
herosofnn
2002-11-09 11:53
2002.11.28
Народ помогите


3-92826
Oleon
2002-11-06 15:20
2002.11.28
Здраствуйте. Где ловить ошибки при работе с TStroredProc?