· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Задержка в процессе по условию из другово процесса

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Сен 24, 2004 09:34:39

с названием темы надеюсь не перемудрил вот размышляю каким образом можно сделать следующие когда в одном процессе начинается выполнятся определённый участок кода процесс тормозится пока из него например по определённому адресу не получат значение или ещё как нибудь смысл в том чтоб второй процесс подал сигнал первому когда он закончил....

можно конечно попробовать сделать хитро послать через сенд месейдж окну второго процесса ид текущего трида и засуспендить её.. далее когда второй процесс сделает свои дела он зарезюмит данную нитку... может есть какие нибудь более красивые варианты?.. да и чтоб второй процесс знал что код в данной точке в первом случаи это через чендмесейдж как раз бы и было


Дата: Сен 24, 2004 11:56:39

Прочитал... и ничего не понял.
Если требуется осуществить синхронизацию процессов, то для этого обычно используют объекты синхронизации. Например, именованные объекты события (CreateEvent,OpenEvent). И функции ожидания, типа
WaitForSingleObject.
Если требуется передавать данные между двумя процессами для этого есть методы межпроцессного взаимодействия, например, именованные пайпы, маилслоты, отображаемые в память файлы. На худой конец можно использовать разделяемую секцию данных в общей DLL'ке, или WM_COPYDATA.


Дата: Сен 24, 2004 13:01:41

Мда красноречием я н еблещу.. задача после того как процес дойдёт до адреса xxxxxxx он останавливается и продолжится только тогда когда второй процесс сделает все свои вмешательства

Задачи:
а)Сообщить второму процессу что проишла оставновка
б)Тормознуть процесс
в)Запустить его обратно из второго процесса

я подумывал сделатать так послать сообщение окну второго процесса с ИД текущего трида и после посыла засуспендить этот трид далее после своих дел второй процесс имея трид который получил от первого процесса просто его рассуспендит и всё...


Дата: Сен 24, 2004 14:14:19 · Поправил: Funbit

первое что пришло в голову:

во втором процессе сразу создать объект Event2 и сделать thread, в котором будет WaitForSingleObject. т.е. второй процесс ждет.

в первом процессе, когда нужно будет сообщить второму о том, что тот может начинать производить какие-то действия, создать Event1, сделать SetEvent Event2 и тут же сделать WaitForSingleObject Event1.

второй процесс рассуспендится ( :) ) сделает работу и в конце сделает SetEvent Event1. тред закончить свою работу (ret сделает) ну а первый процесс продолжит работу.

вообще у рихтера про синхронизацию все есть, почитай


Дата: Сен 24, 2004 14:47:15

Угу спасибо... примено так и нуна сделать


Дата: Сен 24, 2004 14:48:53 · Поправил: Fallout

плохой конект был ... задублилось месага


Дата: Окт 12, 2004 09:24:19

Тэкс нашёл время чтоб всё сделать +) вообщем сделал евент внедрил код в ехе на вызов функции вызываю свой...
типа

Call Orig_Exe_Func

стало

Call My_Stub


так теперь тот код что я генерю в своей программке и каким патчу код....

push eax
push event
call SetEvent
pop eax
call Orig_Exe_Func
ret



в моей программе ..

WaitForSingleObject(event, -1);
printf("Cool\n");

так вот SetEvent возвращает 0!... мм странно хендл от созданного евента разве не глобален?.. и что доступен только в контексте процесса в котором был создан?...

когда создал я евент получил хенддл именно его и прописываю в код... другого процесса... из моего процесса всё ок а вот другой процесс не сигналит...


Дата: Окт 12, 2004 09:53:17

в зависимости от задачи есть
event - просто событие (включено или выключено)
mutex - открывается как файл, пока один держит - все остальные ждут.
semaphor - тоже самое, но на определенное количество подключений (например, не более 3х)


Дата: Окт 12, 2004 10:00:39

„когда создал я евент получил хенддл именно его и прописываю в код... другого процесса... из моего процесса всё ок а вот другой процесс не сигналит...“
э! нужно в другом процессе его заново открыть, или это дочерний процесс должен быть создан с наследованием хэндлов


Дата: Окт 12, 2004 10:14:25

мне ща бежать надо - вот мои прим на дельфях


Дата: Окт 12, 2004 10:18:45

не прилепило :(


Дата: Окт 12, 2004 10:20:29

я не глянул - там экзешники были ;)
во я себе планку поднял ;)

_1160461444__Delphi.zip


Дата: Окт 12, 2004 12:44:01

Мм заново открывать?... ок спасибо теперь всё ястно .... хотя и не очень удобно мне бы что нибудь очень унивирсальное и миниатюрное но спасибо за помощь....

процесс вообще чужой +) но не важно это так..


Дата: Окт 12, 2004 13:03:16

Если кому интерестно то очень удобное место для записи в рантайм вашего кода... можно смело затереть стартовый код по адресу который можно взять из ПЕ структуры EntryPoint +) .... в Си++ а может и ещё каких компилятора... там стартовый код есть который больше обычно не нужен так что смело можно затирать и адрес всегда будете знать этого места +)


Дата: Окт 12, 2004 13:09:07

если это не системный процесс, а просто приложение - запусти его из своей проги через CreateProcess с наследованием хэндлов

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075