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

Вниз

Организовать последовательное выполнение приложений   Найти похожие ветки 

 
Романов Р.В. ©   (2004-04-20 12:43) [0]

При запуске нескольких копий приложения нужно сделать так что бы они выполнялись(т.е. выполняли какие то полезные действия) по очереди. А до завершения предыдущего запущенного приложения они крутятся в пустом цикле.
Т.е. задача организовать среди запущенных приложений очередь.
Какие идеи будут?


 
Reindeer Moss Eater ©   (2004-04-20 12:43) [1]

например запускать последовательно сами приложения


 
Skier ©   (2004-04-20 12:45) [2]


> Какие идеи будут?

Стандартная проблема : "Запустить приложение и дождаться его завершения". Ответов полно. В том числе и здесь...


 
Романов Р.В. ©   (2004-04-20 12:53) [3]

Надо сделать так что бы они выполнялись в той же последовательности в какой были запущены.


 
Reindeer Moss Eater ©   (2004-04-20 12:54) [4]

Они выполняются как ОС на душу положит, а не в той последовательности как их запускали.


 
Тимохов ©   (2004-04-20 12:57) [5]

можно воспользоваться средствами межпроцесного взаимодействия.
например использовать mutex.


 
Романов Р.В. ©   (2004-04-20 13:01) [6]


> Тимохов

Если не затруднит опиши (просто словами) алгоритм использования mutex применительно к этой задаче.


 
Reindeer Moss Eater ©   (2004-04-20 13:04) [7]

Одним мьютексом здесь не обойтись.
Надо N-1 мьютексов


 
Тимохов ©   (2004-04-20 13:05) [8]


> Романов Р.В. ©   (20.04.04 13:01) [6]

Гарантировать, что проги будут выполнятся в том порядке в котором они были запущены (из проводника) думаю не возможно. Порядок будет определяться тем, кто первый дошел до первой строки после begin в dpr.

Стоит дальше продолжать или то, что сказано выше уже не удовлетворяет, что дальнейшее изложение не имеет смысла?

ЗЫ. Я бы сделал запуст всех приложений из другого (тоже вашего). В этом случае можно обеспечить очередь.


 
Тимохов ©   (2004-04-20 13:05) [9]


> Reindeer Moss Eater ©   (20.04.04 13:04) [7]

точно
причем именованными


 
Silver Alex ©   (2004-04-20 13:14) [10]

Можно создать отображаемый файл в памяти
Создать с помощью функции
mainhandle: THandle;
mainhandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE, 0,255,"MainFile")
, затем  получить указатель с помощью функции MapViewOfFile mainpointer:Pointer;
mainpointer:= MapViewOfFile( mainhandle, FILE_MAP_ALL_ACCESS,0,0,0)
ну а с указателем уже придумешь что надо, можешь туда записать что хочешь.Очередь там или чего надо.Это будет один для всех приложений файл, с ним и работай.

Ну и закрыть конечно надо потом.
UnMapViewOfFile(mainpointer);
CloseHandle(mainhandle);

Ну смысл я думаю понятен, попробуй может подойдет.


 
kudatsky   (2004-04-20 13:15) [11]

Используй процедуру FileExecuteWait из RxLib


 
Anatoly Podgoretsky ©   (2004-04-20 13:20) [12]

Управляющиее приложение, посылающие приказ энному "давай работай и доложи когда кончишь", в цикле по Н процессов. Запусапть подчиненные процессы можно в любом порядке одновременно или как бог на душу положит. Диспетчер разберется что кому и когда делать. Мьютексы не нужны.


 
Романов Р.В. ©   (2004-04-20 13:21) [13]

Тимохов ©   (20.04.04 13:05) [8]
Соревнование среди запущенных почти одновременно копий - частный случай и при нормальной работе не должен возникать.

Если приложение убили через Ctrl+Alt+Del, то мьютекс точно умрет или может остаться?


 
Тимохов ©   (2004-04-20 13:24) [14]


> Романов Р.В. ©   (20.04.04 13:21) [13]

как объект ядра - должен помереть, вернее должен уменьшится счетчик ссылок.

Да вообще по-разному можно сделать. Через мьютесы точно можно сделать. Согласен с АП, что нужно управляющее приложение. И наверное согласен (пока не понял), что в случае наличия управляющего приложения можно обойтись без мьютексов.


 
Романов Р.В. ©   (2004-04-20 13:30) [15]

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


 
Тимохов ©   (2004-04-20 13:32) [16]


> Считаю нерациональным вставлять

Почему?
Так у вас оказывается есть управляющее приложение.
Что может быть проще:
1. ЗАпустить
2. Подождать окончания
3. Запустить следующее

делов на 10 минут.


 
Silver Alex ©   (2004-04-20 13:50) [17]


> Романов Р.В. ©

Не понятно в чем состоит задача?В том что бы приложения общались между собой?Так в чем сложность


 
Романов Р.В. ©   (2004-04-20 13:50) [18]

Основное требование к этому планировщику что бы он мог запустить несколько приложений (в том числе и на нескольких ПК) и контролировать их выполнение.
Есть 2 причины ставить приложения в очереди
1. Они используют результаты предыдущей копии.
 В этом случае очередь организуется и управляется планировщиком.
2. Оптимально использовать ресурсы ПК (например одновременное обращение к HDD или CD нескольких приложений сделать последовательным).
Довольно сложно отследить какие приложения не рекомендуется запускать одновременно. Поэтому проще предоставить им самим разбираться между собой.


 
Anatoly Podgoretsky ©   (2004-04-20 13:53) [19]

Так у вас еще и сеть, одназначно клиент-приложения с сервер-диспетчером.


 
Андрей Сенченко ©   (2004-04-20 14:14) [20]

Романов Р.В. ©   (20.04.04 12:43)  

Глубокое ИМХО.
Если приложения, о которых Вы ведете речь - Ваши же самописки, то самым простым и безболезненным способом будет
Anatoly Podgoretsky ©   (20.04.04 13:53) [19]

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


 
Anatoly Podgoretsky ©   (2004-04-20 14:18) [21]

Все равно диспетчер, только приказы приложениям не получится отдавать, но можно будет запускать как паралельно, так по очереди, как с ожиданием, так и без. И все через CreateProcess + для сети на кажжом компьютере приемник/передатчик для синхронизации и передаче результатов в центр.



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

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

Наверх




Память: 0.52 MB
Время: 0.029 c
3-1081756474
Назаров Евгений
2004-04-12 11:54
2004.04.11
SQL Запрос


14-1079244345
Думкин
2004-03-14 09:05
2004.04.11
С днем рождения! 14 марта.


1-1079957069
YuRock
2004-03-22 15:04
2004.04.11
Variant в параметрах функций из dll


14-1081935442
Отто
2004-04-14 13:37
2004.04.11
Как программно включить компьютер?


11-1059981569
VitaLMoya
2003-08-04 11:19
2004.04.11
При компиляции компилятор не находит DsgnIntf.dcu