Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как завершить работу потока принудительно, в ходе его работы? [D5, Win2k, WinXP]


Страницы:   1 2

Zilog ©   (2004-12-10 14:35:00) 

Как завершить работу потока принудительно, в ходе его работы?


Суслик   (2004-12-10 18:12:00) [1]


>  [26] DiamondShark ©   (10.12.04 18:07)

да я его спрашивал, он не говорит.
Почему - не ясно.


DiamondShark   (2004-12-10 18:07:00) [2]


> Zilog ©   (10.12.04 16:55) [9]
> поток формирует отчеты на основе данных из баз данных.

Каким образом формируешь? Какие-то компоненты построители отчётов? Или ещё как?


Leonid Troyanovsky   (2004-12-10 17:41:00) [3]

> Digitman ©   (10.12.04 17:16) [20]

> > Мне удается успешно пользовать Exit даже при CreateThread.

> и что в этом удивительного ?
> в конечном итоге твой Exit в этом случае приводит к тому
> же RETN.

И чего в этом удивительного? :)

Ты внимательный читатель?

Я б и не влез в этот тред, если б не дурацкие RETN.
Просто тихо раздумывал, кто [1] or [2] лучше.

Но, настоящее обсуждение убедило, что [1] - лучше.

--
С уважением, LVT.


Leonid Troyanovsky   (2004-12-10 17:34:00) [4]


> Суслик ©   (10.12.04 17:26) [23]

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


Скажешь тож - флейм. Я из этого аж три бита отспорил :)
Ну, а авторову - авторово.
Но, IMHO, если б конфа была лишь для "авторов", то б ее
никто и не читал.
И так они, IMHO, тут распустились, с кулаками бросаются,
мол, не так его тонкое существо воспринимают.
А как прикажете восприять, если даже с русским языком проблемы.

:)

--
С уважением, LVT.


Суслик   (2004-12-10 17:26:00) [5]


>  [21] Leonid Troyanovsky   (10.12.04 17:23)

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


Digitman   (2004-12-10 17:26:00) [6]


> Leonid Troyanovsky   (10.12.04 17:15) [19]
> Тебя кто-то обманул.


возможно)
но только идиот будет заниматься "самоубиством" таким макаром, вместо того чтобы закончить "жизнь" своего треда классическим способом :

function MyThreadFunc(..): Результат; соотв_согл_о_вызове;
begin
//что угодно, безо всяких ExitThreaed и иже с ними
end; //здесь мы "умрем" как положено, как нас и ждали ТАМ, с "завещанием" и прочими культовыми прибабахами


Leonid Troyanovsky   (2004-12-10 17:23:00) [7]


> Суслик ©   (10.12.04 16:55) [10]
> возволю себе не согласится. Понять что хочет автор из вопроса
> сложно, поэтому нужно знать, что нужно. Например поток может
> сидеть на recv для блокируеющего сокета? Зачем снимать поток,
> когда можно закрыть сокет и recv свалится с ошибкой.
>
> Об этом я и говорю...


Ну, а оно нам нужно, спросил - ответили.
Чего ради тратить слова, если вопрошающего оное
может и не интересовать.
Что б получить плюху -"а я этого и не спрашивал, уроды" ? :)

--
С уважением, LVT.


Digitman   (2004-12-10 17:16:00) [8]


> Мне удается успешно пользовать Exit даже при CreateThread.


и что в этом удивительного ?
в конечном итоге твой Exit в этом случае приводит к тому же RETN.

ты ведь не удивляешься, что твой Exit приводит в этом случае к корректному завершению треда, точно так же как если бы ты использовал класс TThread и вызвал бы этот самы Exit черт-те где в теле перекрытого TThread.Execute ?


Leonid Troyanovsky   (2004-12-10 17:15:00) [9]


> Digitman ©   (10.12.04 16:58) [13]

> > Готов поставить на два бита

> да ставь хоть на "три бита" - в контексте ТЕКУЩЕГО треда
> Майкрософт не позволяет тебе выполить TerminateThread()
> себя самого.


Тебя кто-то обманул.
Но, думаю, что не Microsoft.

Да и чего ты разгорячился?

--
С уважением, LVT.


Leonid Troyanovsky   (2004-12-10 17:11:00) [10]

> Digitman ©   (10.12.04 16:54) [8]

> но тот кто его не сделал и завершил поточную ф-цию  обычным
> образом (RETN) получит тот же корректный результат

Да чего ты привязался к RETN.
Наша конф. называется delphi.

> Exit (или иной выход из функции потока) - вполне достаточно
> и корректно.

> ну и ГДЕ в вопросе сказано, что используется раппер - TThread
> ?!
>
> термин "функция потока" НЕ эквивалентен термину "метод Execute
> класса-наследника TThread"

Мне удается успешно пользовать Exit даже при CreateThread.

> не устраивай дурацкое шоу.

:)

--
С уважением, LVT.


Digitman   (2004-12-10 17:09:00) [11]


> Где-где документированный? В мануале к процессору?


в каком таком "мануале" к какому такому "процессору" ВООБЩЕ фигурирует нечто под названием "трэд" ? или "нить" ? или "кодовый поток" ?

эти механизмы, если они вообще реализованы в коем-то виде реализованы,  специфичны для конкретной ОС, а не для процессора)


Суслик   (2004-12-10 17:08:00) [12]

2zilog

> блокировки нет никакой

Как раз есть. Ты же формируешь отчет из sql сервера? Т.е. ты вызываешь какую-то функцию. На этом месте у тебя все застывает до тех пор, пока база не выполнит запрос. Так?
Если же ты сам строишь отчет, ну какие проблемы - анализируй переодически флажок. Если установлен, то выходи из поточной функции, если нет, продолжай формирование отчета.


Zilog   (2004-12-10 17:06:00) [13]

2Суслик:

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


Digitman   (2004-12-10 17:04:00) [14]


> Где-где документированный? В мануале к процессору?


какой такой нафих "процессор" ?!
ОС разруливает эту ситуацию, а не "процессор" !


Digitman   (2004-12-10 16:58:00) [15]


> Готов поставить на два бита


да ставь хоть на "три бита" - в контексте ТЕКУЩЕГО треда Майкрософт не позволяет тебе выполить TerminateThread() себя самого.


Суслик   (2004-12-10 16:58:00) [16]


>  [9] Zilog ©   (10.12.04 16:55)

я так понимаю, что блокировка идет на обработке базой данных запроса?
Если да, то для начала надо разобраться может запрос можно прервать штатными средствами доступа к базе или самой базы, или использовать асинхронный доступ к базе. АДО, например, такой оддерживает. Когда я разбирался - даже получается.

Имхо снятие потока - это крайняя мера.


Digitman   (2004-12-10 16:55:00) [17]


> Leonid Troyanovsky  


ровно так же как никто не "напрягает" тебя вызывать ExitProcess() вместо того же (столь же корректного в своем контексте) RETN


Суслик   (2004-12-10 16:55:00) [18]

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

Об этом я и говорю...


Zilog   (2004-12-10 16:55:00) [19]

поток формирует отчеты на основе данных из баз данных.
сделал отдельным потоком, чтобы работу основного приложения не блокировать. а "убивать" поток хочу при выходе/отмене задания.
(сильно не ругайте, может я неправильно подошел к решеню данного вопроса :)


Digitman   (2004-12-10 16:54:00) [20]


> Leonid Troyanovsky   (10.12.04 16:30) [5]
> ExitThread сделают и без тебя.


не сомневаюсь.
но тот кто его не сделал и завершил поточную ф-цию  обычным образом (RETN) получит тот же корректный результат


> Exit (или иной выход из функции потока) - вполне достаточно
> и корректно.


ну и ГДЕ в вопросе сказано, что используется раппер - TThread ?!

термин "функция потока" НЕ эквивалентен термину "метод Execute класса-наследника TThread"


> Не мудри


не устраивай дурацкое шоу.
RETN , вызванный в корректном контексте, достаточен для корректного завершения работы трэда.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо