Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизКак завершить работу потока принудительно, в ходе его работы? Найти похожие ветки
← →
Zilog © (2004-12-10 14:35) [0]Как завершить работу потока принудительно, в ходе его работы?
← →
[lamer]Barmaglot © (2004-12-10 14:40) [1]terminateprocess?
← →
Reindeer Moss Eater © (2004-12-10 14:44) [2]в ходе его работы?
Сделать Exit из его Execute
← →
Digitman © (2004-12-10 16:15) [3]вызов ExitThread() в теле поточной ф-ции есть предпочтительный способ завершения работы трэда по его инициативе
допускается (как корректный документированный способ) завершение работы трэда по его инициативе выполнением в его теле маш.инструкции RETN
← →
Digitman © (2004-12-10 16:21) [4]
> Zilog
> принудительно, в ходе его работы
"принудительно" и "в ходе его работы" - взаимоисключающие друг- друга понятия.
убийство (против воли живущего, т.е. насилие) есть "принудительно"
добровольный уход из жизни (по воле живущего, т.е. "самозавершение") есть "в ходе его работы"
убийство противоречит добровольному уходу из жизни
убийство
← →
Leonid Troyanovsky (2004-12-10 16:30) [5]
> Digitman © (10.12.04 16:15) [3]
> вызов ExitThread() в теле поточной ф-ции есть предпочтительный
> способ завершения работы трэда по его инициативе
ExitThread сделают и без тебя.
Exit (или иной выход из функции потока) - вполне достаточно
и корректно.
> допускается (как корректный документированный способ) завершение
> работы трэда по его инициативе выполнением в его теле маш.инструкции
> RETN
Где-где документированный? В мануале к процессору? :)
Не мудри.
--
С уважением, LVT.
← →
Суслик © (2004-12-10 16:41) [6]имхо зависит от того, что поток делает.
Нужно больше информации.
← →
Leonid Troyanovsky (2004-12-10 16:52) [7]
> Суслик © (10.12.04 16:41) [6]
> имхо зависит от того, что поток делает.
> Нужно больше информации.
Готов поставить на два бита, что не нужно.
Вопрошающий даже не озаботился корректностью,
которая так взволновала местную общественность.
Сл-но, "завершить работу потока принудительно" ~
TerminateThread.
Хотя, TerminateProcess, со всех сторон был бы
предпочтительней.
--
С уважением, LVT.
← →
Digitman © (2004-12-10 16:54) [8]
> Leonid Troyanovsky (10.12.04 16:30) [5]
> ExitThread сделают и без тебя.
не сомневаюсь.
но тот кто его не сделал и завершил поточную ф-цию обычным образом (RETN) получит тот же корректный результат
> Exit (или иной выход из функции потока) - вполне достаточно
> и корректно.
ну и ГДЕ в вопросе сказано, что используется раппер - TThread ?!
термин "функция потока" НЕ эквивалентен термину "метод Execute класса-наследника TThread"
> Не мудри
не устраивай дурацкое шоу.
RETN , вызванный в корректном контексте, достаточен для корректного завершения работы трэда.
← →
Zilog © (2004-12-10 16:55) [9]поток формирует отчеты на основе данных из баз данных.
сделал отдельным потоком, чтобы работу основного приложения не блокировать. а "убивать" поток хочу при выходе/отмене задания.
(сильно не ругайте, может я неправильно подошел к решеню данного вопроса :)
← →
Суслик © (2004-12-10 16:55) [10]возволю себе не согласится. Понять что хочет автор из вопроса сложно, поэтому нужно знать, что нужно. Например поток может сидеть на recv для блокируеющего сокета? Зачем снимать поток, когда можно закрыть сокет и recv свалится с ошибкой.
Об этом я и говорю...
← →
Digitman © (2004-12-10 16:55) [11]
> Leonid Troyanovsky
ровно так же как никто не "напрягает" тебя вызывать ExitProcess() вместо того же (столь же корректного в своем контексте) RETN
← →
Суслик © (2004-12-10 16:58) [12]
> [9] Zilog © (10.12.04 16:55)
я так понимаю, что блокировка идет на обработке базой данных запроса?
Если да, то для начала надо разобраться может запрос можно прервать штатными средствами доступа к базе или самой базы, или использовать асинхронный доступ к базе. АДО, например, такой оддерживает. Когда я разбирался - даже получается.
Имхо снятие потока - это крайняя мера.
← →
Digitman © (2004-12-10 16:58) [13]
> Готов поставить на два бита
да ставь хоть на "три бита" - в контексте ТЕКУЩЕГО треда Майкрософт не позволяет тебе выполить TerminateThread() себя самого.
← →
Digitman © (2004-12-10 17:04) [14]
> Где-где документированный? В мануале к процессору?
какой такой нафих "процессор" ?!
ОС разруливает эту ситуацию, а не "процессор" !
← →
Zilog © (2004-12-10 17:06) [15]2Суслик:
блокировки нет никакой. Просто хочется предусмотреть отемну фотмирования отчета, которое может быть достаточно длительным.
Проблема в том, что если в момент формирования, к примеру, выйти из программы - поток продолжает выполнятся, что приводит соответственно к ошибке... как всё это обустроить - не знаю, ибо такая задача перед мной впервые.
← →
Суслик © (2004-12-10 17:08) [16]2zilog
> блокировки нет никакой
Как раз есть. Ты же формируешь отчет из sql сервера? Т.е. ты вызываешь какую-то функцию. На этом месте у тебя все застывает до тех пор, пока база не выполнит запрос. Так?
Если же ты сам строишь отчет, ну какие проблемы - анализируй переодически флажок. Если установлен, то выходи из поточной функции, если нет, продолжай формирование отчета.
← →
Digitman © (2004-12-10 17:09) [17]
> Где-где документированный? В мануале к процессору?
в каком таком "мануале" к какому такому "процессору" ВООБЩЕ фигурирует нечто под названием "трэд" ? или "нить" ? или "кодовый поток" ?
эти механизмы, если они вообще реализованы в коем-то виде реализованы, специфичны для конкретной ОС, а не для процессора)
← →
Leonid Troyanovsky (2004-12-10 17:11) [18]> Digitman © (10.12.04 16:54) [8]
> но тот кто его не сделал и завершил поточную ф-цию обычным
> образом (RETN) получит тот же корректный результат
Да чего ты привязался к RETN.
Наша конф. называется delphi.
> Exit (или иной выход из функции потока) - вполне достаточно
> и корректно.
> ну и ГДЕ в вопросе сказано, что используется раппер - TThread
> ?!
>
> термин "функция потока" НЕ эквивалентен термину "метод Execute
> класса-наследника TThread"
Мне удается успешно пользовать Exit даже при CreateThread.
> не устраивай дурацкое шоу.
:)
--
С уважением, LVT.
← →
Leonid Troyanovsky (2004-12-10 17:15) [19]
> Digitman © (10.12.04 16:58) [13]
> > Готов поставить на два бита
> да ставь хоть на "три бита" - в контексте ТЕКУЩЕГО треда
> Майкрософт не позволяет тебе выполить TerminateThread()
> себя самого.
Тебя кто-то обманул.
Но, думаю, что не Microsoft.
Да и чего ты разгорячился?
--
С уважением, LVT.
← →
Digitman © (2004-12-10 17:16) [20]
> Мне удается успешно пользовать Exit даже при CreateThread.
и что в этом удивительного ?
в конечном итоге твой Exit в этом случае приводит к тому же RETN.
ты ведь не удивляешься, что твой Exit приводит в этом случае к корректному завершению треда, точно так же как если бы ты использовал класс TThread и вызвал бы этот самы Exit черт-те где в теле перекрытого TThread.Execute ?
← →
Leonid Troyanovsky (2004-12-10 17:23) [21]
> Суслик © (10.12.04 16:55) [10]
> возволю себе не согласится. Понять что хочет автор из вопроса
> сложно, поэтому нужно знать, что нужно. Например поток может
> сидеть на recv для блокируеющего сокета? Зачем снимать поток,
> когда можно закрыть сокет и recv свалится с ошибкой.
>
> Об этом я и говорю...
Ну, а оно нам нужно, спросил - ответили.
Чего ради тратить слова, если вопрошающего оное
может и не интересовать.
Что б получить плюху -"а я этого и не спрашивал, уроды" ? :)
--
С уважением, LVT.
← →
Digitman © (2004-12-10 17:26) [22]
> Leonid Troyanovsky (10.12.04 17:15) [19]
> Тебя кто-то обманул.
возможно)
но только идиот будет заниматься "самоубиством" таким макаром, вместо того чтобы закончить "жизнь" своего треда классическим способом :
function MyThreadFunc(..): Результат; соотв_согл_о_вызове;
begin
//что угодно, безо всяких ExitThreaed и иже с ними
end; //здесь мы "умрем" как положено, как нас и ждали ТАМ, с "завещанием" и прочими культовыми прибабахами
← →
Суслик © (2004-12-10 17:26) [23]
> [21] Leonid Troyanovsky (10.12.04 17:23)
собственно говоря флейм ты развел на мое высказывание о том, что чтобы помочь, нужно больше информации от автора. Воспримет ли такую просьбу автор, не воспримет, интересно ему тут копать - его дело.
← →
Leonid Troyanovsky (2004-12-10 17:34) [24]
> Суслик © (10.12.04 17:26) [23]
> собственно говоря флейм ты развел на мое высказывание о
> том, что чтобы помочь, нужно больше информации от автора.
> Воспримет ли такую просьбу автор, не воспримет, интересно
> ему тут копать - его дело.
Скажешь тож - флейм. Я из этого аж три бита отспорил :)
Ну, а авторову - авторово.
Но, IMHO, если б конфа была лишь для "авторов", то б ее
никто и не читал.
И так они, IMHO, тут распустились, с кулаками бросаются,
мол, не так его тонкое существо воспринимают.
А как прикажете восприять, если даже с русским языком проблемы.
:)
--
С уважением, LVT.
← →
Leonid Troyanovsky (2004-12-10 17:41) [25]> Digitman © (10.12.04 17:16) [20]
> > Мне удается успешно пользовать Exit даже при CreateThread.
> и что в этом удивительного ?
> в конечном итоге твой Exit в этом случае приводит к тому
> же RETN.
И чего в этом удивительного? :)
Ты внимательный читатель?
Я б и не влез в этот тред, если б не дурацкие RETN.
Просто тихо раздумывал, кто [1] or [2] лучше.
Но, настоящее обсуждение убедило, что [1] - лучше.
--
С уважением, LVT.
← →
DiamondShark © (2004-12-10 18:07) [26]
> Zilog © (10.12.04 16:55) [9]
> поток формирует отчеты на основе данных из баз данных.
Каким образом формируешь? Какие-то компоненты построители отчётов? Или ещё как?
← →
Суслик © (2004-12-10 18:12) [27]
> [26] DiamondShark © (10.12.04 18:07)
да я его спрашивал, он не говорит.
Почему - не ясно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.039 c