|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.03.2008, 15:06 | #1 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
Убить поток
Попытаюсь описать проблему на словах... Есть Form1. На ней лежит RzPageControl. У PageControl'а есть Sheet. Sheet - есть Parent form2. В Form2 создается поток в котором вызывается функция IcmpSendEcho, т.е. пингуем мы... Если на Form2 нажать Button и написать Thread.Terminate будет все ОК. Но проблема в том, что мне нужно корректно завершить поток при закрытии Form2. А оно происходит при нажатии на кнопе на PageControl, где в коде я написал Sheet.Destroy. Т.е. в Form2 посылается сообщение WM_DESTROY. Не получается при этом правильно завершить поток... Пытался перед Sheet.Destroy сделать sendMessage(...WM_CLOSE..), но результата не увидел. Проблема возникает тогда, когда IcmpSendEcho долго не отвечат, т.е., например, ждет ответа... Собственно повторяю вопрос -как при заданных условиях коректно убить поток?
|
21.03.2008, 16:12 | #2 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Цитата:
----------------- Да, ещё, забыл сразу добавить, что, по-видимому, здесь лучше использовать не IcmpSendEcho, а IcmpSendEcho2 (win2k и выше, в связи с параметром ApcRoutine). Последний раз редактировалось B_N; 21.03.2008 в 17:00. |
|
21.03.2008, 19:10 | #3 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Если юзер не хочет ждать, программно жмем на Form2 Button (где написано Thread.Terminate), а затем закрываем Form2. |
|
22.03.2008, 05:04 | #4 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
Thread.Terminate здесь не прокатит по той простой причине, что метод просто выставляет флаг Terminated := true, т.е. вежливо просим поток завершиться. Он конечно же завершится, но вот форма давно уже будет убита. А отсюда и AV. Про IcmpSendEcho2 давненько уже думаю, т.к. она все-таки ассинхронна... Только вот чертовски лень переделывать код... Ладно, спасибо за ответы. Буду бороться с ленью...
P.S. Поспешил с ответом... Пожалуй Михалыч ты прав... Последний раз редактировалось Баламут; 22.03.2008 в 05:13. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как убить процесс зная его имя? | One.Love | Win Api | 14 | 18.02.2012 14:31 |
Поток | Черничный | Общие вопросы Delphi | 5 | 27.09.2008 21:23 |
перенос данных!!! SOS начальник готов УБИТЬ((( | Exo | Microsoft Office Excel | 25 | 11.02.2008 16:18 |