|
|
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Наткнулся на непонятки в DX10.2.3_CE: если создать доп.поток приостановленным, например так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. а затем запустить рекомендуемой процедурой Start, то получаем отлуп Код: pascal 1. Старый добрый Resume, показываемый в Code Insight серым цветом (deprecated же), запускает поток корректно. Я что-то пропустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 01:44 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокЯ что-то пропустил? Очень много... Уже и не помню, с какой версии такое поведение. Даже в fpc пишут: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 07:46 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanДаже в fpc пишут но мне нужно ехать, а не шашечки. :) Как быть? По-прежнему запускать посредством Resume? Или есть более кошерный, но работающий способ? зы. на Лазаре применение Resume/Start нареканий не вызывает (кроме пресловутого предупреждения о deprecated). А вот на последних дельфях ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 10:41 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Док, Кошерно - через TEvent... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 11:05 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокИли есть более кошерный, но работающий способ? Уже написали. У меня аналогично: поток стартует, готовит очередь и засыпает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 11:20 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
zinpubКошерно - через TEvent... ага, знаю я вас. Сначала эвенты, потом мютексы, семафоры, критические функции и проч.проч. Нафик, допилю 10-летней давности проект на D2007 и уйду на Лазарь :) зы. Рустам, перенеси, плз, относящиеся к теме посты в отдельную ветку. Думал, только спросить, а тут "вон оно, чо" © ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 12:55 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanУже написали. т.е. приостановленный поток топорным способом не запустить, а только через SetEvent? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 13:08 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Док, Зато наглядно, в случае suspend/resume - не угадаешь - где остановился поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 13:30 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокwadmanУже написали. т.е. приостановленный поток топорным способом не запустить, а только через SetEvent? Топорным способом - это не кашерно и не предсказуемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 14:11 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanТопорным способом - это не кашерно и не предсказуемо. у меня поток выполняет одноразовую работу. А твой совет нарушает принцип бритвы Оккамы :) зы. иногда желание довести все до "совершенства" рождает трудно читаемый код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 16:15 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокА твой совет нарушает принцип бритвы Оккамы :) Нисколько. Как раз необходимость корректно завершить/остановить поток это необходимость. Другое дело, что не все так считают. Кто-то и "пожалуйста" не считает нужным говорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 16:34 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокА твой совет нарушает принцип бритвы Оккамы :) Вот минимальный поток с доп. функционалом: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 16:51 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanВот минимальный поток с доп. функционалом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 21:11 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокwadmanВот минимальный поток с доп. функционалом как человек, варивший трубы, скажу, что тут поработал Мастер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 21:28 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
defecatorтут поработал Мастер это кто-то оспаривает? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 22:00 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Докэто кто-то оспаривает? ;) Руки мастера, мозг ... Но тут надо историю знать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 22:39 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокwadmanВот минимальный поток с доп. функционалом Все будет проще, если код потока отделишь от формы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 22:43 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanВот минимальный поток с доп. функционалом: А почему Sleep(100), а не 146, например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 22:53 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Это я к тому, что: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 22:58 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
alekcvpwadmanВот минимальный поток с доп. функционалом: А почему Sleep(100), а не 146, например? Пусть будет 146. Не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 22:58 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanВсе будет проще, если код потока отделишь от формы. :)А я всегда говорил, что форма (контролы) это витринка. Процессору (мозгу) интересен ассемблер. Иллюстрация у магазина: - Экспозиция в витрине - Вывеска -- тупо нарисовано на картонке -- железную конструкцию (типа железный сапог на цепях) ветер качает ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 00:22 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanВсе будет проще, если код потока отделишь от формы. :) мой код, написанный 10 лет назад, теперь у меня вызывает бурю негативных эмоций. А ты предлагаешь еще "отделять бизнес слой от ГУИ-шного" © [spoiler][youtube= ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 08:44 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокА ты предлагаешь еще "отделять бизнес слой от ГУИ-шного" © Предлагаю взять мою обертку и не париться. вместо батона кинул поток на форму, завел пару тасков и их обработчиков и всё! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 08:51 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanДокА ты предлагаешь еще "отделять бизнес слой от ГУИ-шного" © Предлагаю взять мою обертку и не париться. вместо батона кинул поток на форму, завел пару тасков и их обработчиков и всё! давай обёртку, мне надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 09:01 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
defecatorwadmanпропущено... Предлагаю взять мою обертку и не париться. вместо батона кинул поток на форму, завел пару тасков и их обработчиков и всё! давай обёртку, мне надо Дак тут всё https://github.com/wadman/wthread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 09:10 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmandefecatorпропущено... давай обёртку, мне надо Дак тут всё https://github.com/wadman/wthread я забыл, где оно паслось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 09:20 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanПредлагаю взять мою обертку и не париться. надеюсь, на D2007 взлетит. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 09:24 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокwadmanПредлагаю взять мою обертку и не париться. надеюсь, на D2007 взлетит. Спасибо :) Летает и на D7 и на 10.x и на маках, убунтах всяких. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 09:27 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanДокпропущено... надеюсь, на D2007 взлетит. Спасибо :) Летает и на D7 и на 10.x и на маках, убунтах всяких. хорошо наговнокодил, молодец ! Щаз буду юзать ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 09:28 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
defecatorwadmanпропущено... Летает и на D7 и на 10.x и на маках, убунтах всяких. хорошо наговнокодил, молодец ! Щаз буду юзать ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 09:34 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокНаткнулся на непонятки в DX10.2.3_CE: если создать доп.поток приостановленным, например так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. а затем запустить рекомендуемой процедурой Start, то получаем отлуп Код: pascal 1. Старый добрый Resume, показываемый в Code Insight серым цветом (deprecated же), запускает поток корректно. Я что-то пропустил? я вообще не вижу смысла в твоём коде, делай просто Код: pascal 1. 2. 3. 4. 5. 6. будет то же самое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 10:52 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
defecatorкак человек, варивший трубы, скажу, что тут поработал Мастер мне когда на хате ремонт доделали и я уже заезжал, обнаружилось что дурит смеситель с термостатом в ванной, не работает, кипяток льет. выяснилось что монтажники-джамшуты кроме всего прочего и подводку в этом месте перепутали, а есть лишь небольшое ревизионное окошко и думал что придется ломать плитку, не успев заехать. благо спец именно по сантехнике сумел перепаять прям через эту маленькую дверцу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 11:55 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadman, Как раз собирался искать :) Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 14:23 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)я вообще не вижу смысла в твоём коде, делай просто Код: pascal 1. 2. 3. 4. 5. 6. будет то же самое В моём коде это имеет смысл. На, пробуй свои советы на практике :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 14:35 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Док В моём коде это имеет смысл. На, пробуй свои советы на практике :) Как я понимаю, неважно, создаем мы так Код: pascal 1. или же так Код: pascal 1. поток в конструкторе TThread.Create создается приостановленным и стартует (даже если в конструкторе наследника используется inherited Create(False) ) только после выполнения конструктора - в процедуре AfterConstruction. Поэтому все операторы и процедуры в конструкторе класса-наследника в любом случае выполнятся до того, как стартует поток. Может я ошибаюсь, конечно, но по-моему это так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 15:09 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
s62, s62 и стартует (даже если в конструкторе наследника используется inherited Create(False) ) только после выполнения конструктора - в процедуре AfterConstruction Не даже если, а просто если. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 15:26 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокНаткнулся на непонятки в DX10.2.3_CE: если создать доп.поток приостановленным, например так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. а затем запустить рекомендуемой процедурой Start, то получаем отлуп Код: pascal 1. Старый добрый Resume, показываемый в Code Insight серым цветом (deprecated же), запускает поток корректно. Я что-то пропустил?Правильно тебя посылает. Скорей всено, Start выполняет запуск потока, который запрещен в конструкторе. Передай False в параметр Suspended - и всё, никаких Resume не надо будет и все будет хорошо. Suspended нужно для того, чтобы после конструктора но до запуска потока что-то изменить в объекте потока. Не твой случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 15:51 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
wadmanВот минимальный поток с доп. функционалом wadman Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Брррр. Надо хоть так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 15:55 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
YuRock, А еще желательно в деструкторе проверять на Assigned( FEvent ), если в конструкторе возможны исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 15:57 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
YuRockСкорей всено, Start выполняет запуск потока, который запрещен в конструкторе. Абсолютно верно. На Tokyo Start разрешен только в основном потоке, а вот в Лазарусе - везде(и в конструкторе, и в основном потоке). И, теперь вижу, что это правильно: ибо, если создать поток так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. , но "забыть" стартануть его, то код в основном потоке продолжится дальше без выполнения fThread.Execute. А вот это уже фэйл :) YuRockПередай False в параметр Suspended - и всё, никаких Resume не надо будет и все будет хорошо. Я это делаю намеренно: мне нужно быть точно уверенным, что некоторые переменные будут инициализированы в конструкторе ДО запуска доп.потока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 21:58 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Вообще не понимаю смысла приостановленных нитей. Они ж нужны чтобы выполнить работу в определенный момент времени. А если надо пауза, то это дело объектов синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 22:06 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокЯ это делаю намеренно: мне нужно быть точно уверенным, что некоторые переменные будут инициализированы в конструкторе ДО запуска доп.потока Независимо от параметра - ВСЕ переменные будут инициализированы в конструкторе ДО запуска потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 22:44 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
alekcvpВСЕ переменные будут инициализированы в конструкторе ДО запуска потока это описано в доке или просто твоя уверенность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 23:23 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
Я чуть выше неточно выразился: мне инициализировать некоторые переменные ДО запуска, но не только в конструкторе (например, frmSplash в коде выше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 23:40 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокalekcvpВСЕ переменные будут инициализированы в конструкторе ДО запуска потока это описано в доке или просто твоя уверенность?Да, но ищи сам. Главное, это описано в исходниках класса TThread - запуск потока происходит в AfterConatruction. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 23:55 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
ДокЯ чуть выше неточно выразился: мне инициализировать некоторые переменные ДО запуска, но не только в конструкторе (например, frmSplash в коде выше).Тогда да, надо. Но тогда и Start должен сработать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 23:56 |
|
||
|
Вызов Start для приостановленного потока
|
|||
|---|---|---|---|
|
#18+
YuRockэто описано в исходниках класса TThread - запуск потока происходит в AfterConatruction в справке тоже об этом сказано. По коду, оба метода: и Start, и AfterConstruction вызывают InternalStart, только с разными параметрами. Так что, про "все в конструкторе инициализируется ДО" Execute доп.потока - это я просто сам не догадался :) Познавательно, однако... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2018, 00:49 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040173]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 435ms |

| 0 / 0 |
