|
|
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
Подскажите, как лучше поступить при завершении массива потоков. У меня потоки обращаются к Oracle. Для их завершения я использую следующий код: Код: pascal 1. 2. 3. 4. если по каким-либо причинам сервак задумался и ThreadDB[i].oraSession.BreakExecution; не сработало (а такое бывает 100%) и WaitFor длиться вечно, то какими средствами можно корректно завершить приложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 09:24 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrb, Гарантированно - только TerminateThread, но это плохой подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 10:14 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
Есть EndThread, ExitThread Но это зло Особенно если есть инициализируемые и финализируемые данные Лучше выставь адекватный таймаут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 10:20 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
таймаут на waitfor? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 10:23 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbПодскажите, как лучше поступить при завершении массива потоков. У меня потоки обращаются к Oracle. Для их завершения я использую следующий код: Код: pascal 1. 2. 3. 4. Достаточно только Free, в деструкторе уже есть WaitFor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:01 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbесли по каким-либо причинам сервак задумался и ThreadDB[i].oraSession.BreakExecution; не сработало (а такое бывает 100%) и WaitFor длиться вечно Установить TOraSession.Option.ConnectionTimeOut не предлагать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:03 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbПодскажите, как лучше поступить при завершении массива потоков. У меня потоки обращаются к Oracle. Для их завершения я использую следующий код: Код: pascal 1. 2. 3. 4. если по каким-либо причинам сервак задумался и ThreadDB[i].oraSession.BreakExecution; не сработало (а такое бывает 100%) и WaitFor длиться вечно, то какими средствами можно корректно завершить приложение?Кроме того, ты уверен, что OraSession.BreakExecution нужно вызывать в главном потоке, при том что ThreadDB уже с флагом Terminated? Я бы послал потоку сообщение "DoBreakExecution", дождался, и лишь потом дергнул Terminate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:07 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
Квейд, в главном потоке, потому что запрос завис/заблокирован на сервере и Terminated ничем не поможет для остановки потока. В компонентах DOA TOracleSession нет такого свойства как TOraSession.Option.ConnectionTimeOut. Это ODAC, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:18 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
А где в методе Free кроется WaitFor? у меня в исходниках только Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:26 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbА где в методе Free кроется WaitFor? у меня в исходниках только Код: pascal 1. 2. КвейдДостаточно только Free, в деструкторе уже есть WaitFor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:31 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbКвейд, в главном потоке, потому что запрос завис/заблокирован на сервере и Terminated ничем не поможет для остановки потока. В компонентах DOA TOracleSession нет такого свойства как TOraSession.Option.ConnectionTimeOut. Это ODAC, наверное.Если выполнение синхронное, просто вызывай BreakExecution из главного, а в обработчике исключений потока делай выход из своего метода Execute. Установи у потока FreeOnTerminate = True, и выделенное спокойно убери. Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:40 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
Вот тебе по теме, кстати http://www.sql.ru/forum/888640/vypolnenie-preryvanie-zaprosa-v-otdelnom-potoke-doa-4-1-toracledataset-breakexecution ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:40 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
КвейдВот тебе по теме, кстати http://www.sql.ru/forum/888640/vypolnenie-preryvanie-zaprosa-v-otdelnom-potoke-doa-4-1-toracledataset-breakexecution Почему некоторые считают, что порядок завершения потоков никогда не важен? Я уже не говорю о том, что при таком подходе мягко говоря неудобно перезапускать поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:52 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
КвейдУстанови у потока FreeOnTerminate = True, и выделенное спокойно убери.Не то процитировал. Хотел это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:53 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
КвейдВот тебе по теме, кстати http://www.sql.ru/forum/888640/vypolnenie-preryvanie-zaprosa-v-otdelnom-potoke-doa-4-1-toracledataset-breakexecution Читал, ничего интересного не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 11:59 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
FreeOnTerminate = True, не подходит, нужно перезапускать потоки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 12:00 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
YuRockПочему некоторые считают, что порядок завершения потоков никогда не важен? Полагаю, что автору не важно, в каком порядке будут завершены его запросы-в-потоках. Или пусть автор меня поправит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 12:01 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
Квейд, не важна очередность завершения, важно корректность перезапуска, освобождение ресурсов ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 12:03 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbFreeOnTerminate = True, не подходит, нужно перезапускать потоки Пересоздавать тоже можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 12:16 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
wadman, я это и имел ввиду, но как быть с общими ресурсами? я их очищаю/разрушаю только после разрушения всех доп. потоков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 12:21 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbкак быть с общими ресурсами? Это решает программист. Можно оставить и отдать следующему потоку, можно и их создавать для каждого потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 12:23 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
cptngrbА где в методе Free кроется WaitFor? у меня в исходниках только Код: pascal 1. 2. Ты смотришь Free TObject'а. А надо смотреть Destroy TThread'а. Увидишь много нового и интересного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 13:21 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
IMHO & AFAIK Если проблема в том, что BreakExecution не всегда срабатывает на Ваших запросах и есть админские права на сервер, можно поступить жестче, в параллельной сессии с админсками правами ALTER SERVER KILL SESSION, KILL SESSION тоже не всегда помогает, но это все же более грубый/надежный способ, чем Break по сети. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 13:54 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
остается этот вариант рассмотреть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 14:04 |
|
||
|
Гарантировано остановить поток
|
|||
|---|---|---|---|
|
#18+
wadmancptngrbFreeOnTerminate = True, не подходит, нужно перезапускать потоки Пересоздавать тоже можно. Да, используя дополнительные костыли, типа OnTerminate. В итоге кода получится гораздо больше, чем Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2018, 15:14 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39624104&tid=2041062]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
634ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 962ms |

| 0 / 0 |
