|
|
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
Почему в Delphi XE методы "suspend" и "resume" в TThread помечены как "deprecated"? Как приостановить работу потока и потом снова его запустить? Как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 22:08 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
Sleep(), WaitForSingleObject(), WaitForMultipleObjects() - выбирай на вкус. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 22:12 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
VirtaOtec, То что они deprecated не значит что они не работают. Другое дело что пользоваться ими надо с осторожностью, понимая что при resume что-то (например всякое I/O) может пойти не так. А так, рекомендуется в цикле потока проверять на некий boolean с паузой вручную. Ну что-то типа: while DoSleep do sleep(1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 22:12 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
rgreatрекомендуется Дайте ссылку на место где это рекомендуется. Чтобы потом можно было всем тыкать ею в лицо: "там был? так вот в этом - самая большая ошибка, забудь всё, чему там научили". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 22:16 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Это только один из вариантов заменяющих suspend/resume. Самый простой для понимания. Спорить с тобой за какую-то фигню у меня интереса нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 22:20 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
rgreatСамый простой для понимания. И совершенно неприемлемый в реальных программах. Думать же надо, когда советуешь на форумах говнокод. Топикстартеры на него слетаются миллионами. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 22:34 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Реальный код много места займет. А так - умному достаточно что бы идею понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 22:53 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
rgreat А так, рекомендуется Dimitry Sibiryakov Дайте ссылку на место где это рекомендуется. Чтобы потом можно было всем тыкать ею в лицо: Вы оба заняли крайние позиции. Истина где-то в середине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2020, 23:10 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
То есть, остановить поток так, чтобы не срабатывал его метод execute до того, как опять возобновишь работу, не получится? Тот же sleep надо вызывать на какое-то время в цикле до тех пор, пока поток не будет активирован - значит, на малое время. То есть, поток все равно будет работать, хоть и не станет выполнять никаких действий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 07:49 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov rgreatСамый простой для понимания. И совершенно неприемлемый в реальных программах. Думать же надо, когда советуешь на форумах говнокод. Топикстартеры на него слетаются миллионами. Как показывает практика, начинающие вызывают из потока synchronize и не парятся. Так что организация паузы с помощью sleep это самое безобидное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 08:03 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
VirtaOtecТо есть, остановить поток так, чтобы не срабатывал его метод execute до того, как опять возобновишь работу, не получится? Обычно этого и не требуется. Потоки запускаются чтобы сделали какую-то работу. Как только они её сделали - они завершаются. Особый случай - рабочие потоки. Но эти естественным путём ждут появления задания в очереди и опять же их приостанавливать не требуется. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 12:25 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
особых случаев вообще много, всяких и разных. Но особые на и особые, что новичок с ними не столкнется от слова "вообще". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 12:53 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
Vizit0rособые на и особые, что новичок с ними не столкнется Новичок на то и новичок, чтобы считать себя и свои случаи исключительно особенными. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 13:17 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
VirtaOtec То есть, остановить поток так, чтобы не срабатывал его метод execute до того, как опять возобновишь работу, не получится? Очень долго смотрел на эту фразу, никак не могу понять, что за проблему Вы решаете? Внешние остановки/запуски потока нужны, по моему опыту, только в отладочных целях, либо для модификации поведения "чужих" потоков, что похоже на отладку. В нормальной ситуации, поток сам входит в ожидающее состояние. Вы знакомы с объектом/понятием TEvent? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 14:38 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
VirtaOtec Почему в Delphi XE методы "suspend" и "resume" в TThread помечены как "deprecated"? Как приостановить работу потока и потом снова его запустить? Как? В хелпе по этим методам достаточно ясно написано, почему их решили задепрекейтить. Поток, остановленный извне, останавливается в совершенно произвольной точке, например внутри системного вызова, работа которого зависит от глобального состояния системы. И если за время простоя потока это состояние изменится, вызов вернет неактуальную или некорректную информацию. Короче, принудительное торможение потоков извне -- это источник неуловимых глюков и так делать нельзя. Особенно новичкам, у которых с потоками и так очень непростые взаимоотношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 15:40 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
VirtaOtec То есть, остановить поток так, чтобы не срабатывал его метод execute до того, как опять возобновишь работу, не получится? Тот же sleep надо вызывать на какое-то время в цикле до тех пор, пока поток не будет активирован - значит, на малое время. То есть, поток все равно будет работать, хоть и не станет выполнять никаких действий. Если использовать класс, то ставишь перед кодом в потоке, который надо выполнить по какому-то условию: Код: pascal 1. Когда в основном потоке что-то случилось и нужно запустить поток, вызываешь Код: pascal 1. Чтобы сбросить событие: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2020, 16:09 |
|
||
|
Как приостановить работу потока? Скажите, прошу!
|
|||
|---|---|---|---|
|
#18+
VirtaOtec То есть, остановить поток так, чтобы не срабатывал его метод execute до того, как опять возобновишь работу, не получится? Тот же sleep надо вызывать на какое-то время в цикле до тех пор, пока поток не будет активирован - значит, на малое время. То есть, поток все равно будет работать, хоть и не станет выполнять никаких действий. Если цель в том, чтобы потоку дать задачу и он сам остановился при её завершении до следующего задания, то у меня есть решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2020, 19:45 |
|
||
|
|

start [/forum/topic.php?fid=58&tid=2038243]: |
0ms |
get settings: |
5ms |
get forum list: |
7ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
183ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 441ms |

| 0 / 0 |
