|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.11.2010, 11:14 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
TThread выполняет что-либо пока работает запущенная им программа
Всем привет!
Вернусь к вам со своим бараном=) Собственно: поток TThread запускает програму используя функцию CreateProcess и ждёт когда та отживёт своё: Код:
Изменить работу потока таким образом, чтобы пака работает программа поток что-то выполнял. К примеру: Сверял время с системным, и завершил программу в указанное время, а затем и сам закрылся. Собственно перечитал много чего=) Много где советовали использовать результаты WaitForSingleObject. Делаю: Код:
Может время не привельно сверяю? Может ещё что-то? Нарвался на статью "Синхронизация процессов при работе с Windows (статья)" в DRKB прочитал и перечитал, и понял что я чего-то не понимаю, а именно "Что такое сигнальное состояние?". Выкладываю проект, может там ошибка.. Последний раз редактировалось Человек_Борща; 24.11.2010 в 11:19. |
24.11.2010, 21:12 | #2 | |
Форумчанин
Регистрация: 17.02.2010
Сообщений: 399
|
примерно так
Код:
Цитата:
поток открывает и следит в то время как главная форма делает ShowMessage. почему то не дает сделать вложение Код:
Последний раз редактировалось Stilet; 25.11.2010 в 11:09. |
|
24.11.2010, 22:07 | #3 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
Ты напутал с обработкой значений, возвращаемых функцией WaitForSingleObject. Вот так будет правильно:
Код:
|
25.11.2010, 01:24 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Мне необходимо чтобы поток запускал и ждал завершения того что запустил. А пока он ждёт завершения то, он сверяет системное время с заданным, и в заданное время он убивает то что запустил.
maxionans Попровал согласно вашему замечанию. Но : Код:
|
25.11.2010, 06:29 | #5 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
для начала нужно проверить, входит ли выполнение кода в условное ветвление "if Reasson = WAIT_TIMEOUT then". Если входит, тогда искать проблему в сравнении "TimeToStr(Now) = MainForm.TimeEdit.Text". Вообще, лучше TimeEdit заменить на TDateTimePicker и сравнивать как "if CompareTime( Now, DateTimePicker.Time ) >= 0 then".
|
25.11.2010, 11:02 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
условие
Код:
Далее если указанное время уже прошло или сейчас есть. То прыгает в : Код:
Затем END; тела TThread.execute; Потом идёт в: Код:
Код:
TmyThread.FreeOnTerminate:=TRUE; Затем AccessViolation с обращением к нулям. И всё при условии что TerminateProcess так и небыло выполнено! Запущенная программа продолжает работать! Я в недоумении... |
25.11.2010, 11:42 | #7 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
У тебя в TerminateProcess передаётся идентификатор процесса, но туда нужен его хендл: TerminateProcess( PrcI.hProcess ). И не забудь закрывать хендлы процесса перед выходом из потока: CloseHandle( PrcI.hProcess ) и CloseHandle( PrcI.hThread ). А с Access Violation отдельно разбираться надо.
|
25.11.2010, 13:23 | #8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Ура, работает!
Код:
maxionans отдельное большое спасибо и + |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать сообщение (Ассемблер )Написать комментарии и определить что выполняет TSR программа | 9ino4ka | Помощь студентам | 3 | 02.06.2010 16:57 |
Как работает программа и что делает | dragun4ik | Помощь студентам | 0 | 23.05.2010 15:51 |
Не работает программа, что делать? | St1mkA | Помощь студентам | 6 | 28.04.2010 20:22 |
Определить что выполняет данная программа | anna_ | Помощь студентам | 2 | 17.12.2009 22:03 |
что выполняет код | sanya_oz | Общие вопросы Delphi | 2 | 23.04.2009 12:02 |