|
|
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. Тестовый проект. Форма состоит из мemo, и двух кнопок: одна запускает/останавливает поток, другая отправляет строку в поток. Код: 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. Тестирование было с ReportMemoryLeaksOnShutdown := true; что показало, что память не теряется при многочисленных отправках строк. Delphi XE2. Вопросы, предложения? :) Репозитарий на гитхабе: https://github.com/wadman/wthread/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 13:10 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, 1. KISS 2. RTFM твой WM_STRING - это PSM_SHEETINFO. маловероятно, конечно, что система догадается посласть его твоему окну, но когда догадается таки - ожидаемой строки ты там не найдешь)) 3. зачем отправлять всего лишь Word, когда "по ширине" вполне пролазит WPARAM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 14:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00ch KISS Не осилил, поясни. Если речь о Terminate и goto, то считай это перестраховкой для начинающего. fd00chтвой WM_STRING - это PSM_SHEETINFO. WM_USER + $100 + 1 <> WM_USER+101 fd00chзачем отправлять всего лишь Word, когда "по ширине" вполне пролазит WPARAM? Можно и так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 14:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanWM_USER + $100 + 1 <> WM_USER+101профнепригодность, блин, доллары перестаю замечать wadmanНе осилил, пояснизачем писать сложно, когда можно просто? у тебя задача потока в чем заключается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chу тебя задача потока в чем заключается? У меня - ни в чем. Свистоперделка Конкретный вопрос задай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
1. зачем нужен такой поток? 2. зачем потоку нужны сообщающие о принятых данных события, которые не синхронизированы ни с чем? 3. по мотивам п.2. в чьем контексте вызывается TfrmWThreadTest.ReceiveString с обращением к Memo1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Не понял для чего шаблон потока. Сделай пояснения, please. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00ch1. зачем нужен такой поток? 2. зачем потоку нужны сообщающие о принятых данных события, которые не синхронизированы ни с чем? Это шаблон. fd00chв чьем контексте вызывается TfrmWThreadTest.ReceiveString с обращением к Memo1? Естественно в главном потоке, который обслуживает VCL. Как и все, что дергается из WWindowProc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Aleksey V.P.Сделай пояснения, please. Для людей, которые создают такие темы: http://www.sql.ru/forum/1050309/tthread-nuzhna-li-v-privedennom-kode-sinhronizaciya http://www.sql.ru/forum/1050203/obrashhenie-k-forme-iz-thread http://www.sql.ru/forum/1049953/osnovy-tthread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:39 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Я вижу в тексте слово GOTO - код КГ/АМ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorЯ вижу в тексте слово GOTO - код КГ/АМ Перед этим Label не заметил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:49 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanДля людей, которые создают такие темы: http://www.sql.ru/forum/1050309/tthread-nuzhna-li-v-privedennom-kode-sinhronizaciya http://www.sql.ru/forum/1050203/obrashhenie-k-forme-iz-thread http://www.sql.ru/forum/1049953/osnovy-tthread Спасиба за пояснения, буэшечку словил. Поясни смысл использования оператора GoTo, без него никак не обойтись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Например использовать try .. finally .. end.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Aleksey V.P.без него никак не обойтись? Обойтись, тот же break. Только я не сторонник бинарной логики "если, то", то есть если выполняется, как заложено, то нехай буде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Aleksey V.P.Например использовать try .. finally .. end.. В этом коде это лишнее. Раз уж такой любитель процедурных вызовов, то try должны расставлены быть в вызываемых процедурах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanЕстественно в главном потоке, который обслуживает VCL. Как и все, что дергается из WWindowProc.да, прощелкал, что создание окна идет из конструктора, а не из Execute ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 16:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman http://www.sql.ru/forum/1050203/obrashhenie-k-forme-iz-thread 14899112 Пример на основе моего модуля: 1. Добавляется процедура своего парсера. 2. В Execute ловится любой свой код посредством SendMessageToThread и процедура запускается. 3. Из потока вполне себе можно отправлять сообщения: прогресс выполнения, коды действия, диагностические сообщения и т.п. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. То есть поток выполняется всегда, но когда не парсит, то ожидает "приказа" в виде SendStringIntToThread(77, 'http://ya.ru') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 16:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Блин, как-то всё необоснованно сложно завернуто. Нет никакого стека для присланных URL, если поток не пропарсил предыдущий URL, то передать следующий URL будет проблематично. Особенно если это связано с большими ресурсными затратами или с обращением к устройствам ввода/вывода. Предлагаю изменить для теста код твоего потока следующим образом: procedure TWThread.ParseUrl(const URL: string); begin SendString('Begin parsing...'); // парсер Sleep(1000); SendString('Done parsing...'); end; и попробовать пообращаться к потоку раз в пол секунды с разными урлами. Сколько урлов пропарсит твой поток? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 17:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaНет никакого стека для присланных URL Откуда такая информация? DimonkaСколько урлов пропарсит твой поток? Столько, сколько вмещает очередь сообщений ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 17:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Но именно в случае парсером страниц я бы сделал не один, а 50 потоков, регулируемых из главного, а не пихал бы всю работу в один доп поток. И при этом анализировал бы занятость потоков. Благо для этого (диалога между основным и доп потоком) тут все предусмотрено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 17:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Завтра напишу чуть более сложный пример для 50-ти потоков, которые стартуют случайно, отсчитывают случайное количество секунд и сообщают о своей работу основному потоку. Никаких тормозов интерфейса при этом не будет. Примерно такой метод работы с устройствами у меня используется на производстве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 18:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaНет никакого стека для присланных URL Откуда такая информация? DimonkaСколько урлов пропарсит твой поток? Столько, сколько вмещает очередь сообщений ОС. Ну так вот в том-то и дело, что поток использует очередь сообщений, а не очередь заданий. Отправителю надо будет хранить урлы, пока их не обработает поток. Напиши код по обработке 2х урлов применро так: Код: pascal 1. 2. 3. 4. 5. и посмотри, что он тебе выдаст. Только не забудь поставить sleep(20) в парсинг урлов для изображения непосильного труда. зы DoParseURL() должен посылать какие надо команды для парсинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 18:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka, сам напиши DoParseUrl и покажи, что в нем не так. У меня впечатление, что ты не понимаешь до конца, как это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 19:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
2 wadman Не вчитывался ни в класс, ни в шаблон, ни в ваш диалог, но на беглый взгляд - я бы ни в коем, НИ В КОЕМ случае не использовал сообщения/события для обмена данными, только для сигнализации. Тем более в шаблоне потока. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 19:30 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, я так полагаю, это будет что-то вроде этого? Код: pascal 1. 2. 3. 4. 5. Можешь тестировать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 19:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамя бы ни в коем, НИ В КОЕМ случае не использовал сообщения/события для обмена данными, только для сигнализации. Тем более в шаблоне потока. И это правильно. Шаблон-же. Нужна копия данных, с выделением памяти. Но вот Dimonka, кажется хочет сделать свою работу моими руками, подогнав за мой счет шаблон под конкретную задачу. :) DimonkaМожешь тестировать :) Напишу конкретный парсер, где процедура парсинга будет твоя. А остальное, вместе с менеджером потоков, белым/черным списком урлов и диагностическими сообщениями - мое. Недорого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 19:53 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Получается, вместо примера использования ты показываешь мусор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 20:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka, некрасиво брать на слабо. Идеального кода не существует, как и людей. Научись адаптировать код, если программист. Это лишь шаблон, который справляется с необходимым минимумом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 20:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНИ В КОЕМ случае не использовал сообщения/события для обмена данными Майкрософт ниего против не имеет, однако: http://msdn.microsoft.com/en-us/library/windows/desktop/ms649011.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 23:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Arioch> Майкрософт ниего против не имеет, однако Ну, Майкрософту и вам, с ним согласным, виднее, конечно. Можете хоть в ногу себе стрелять, MS тоже против не будет. P.S. Если уж чешется WM_COPYDATA, то лучше напрямую MMF использовать (оно через них работает, AFAIK). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 23:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Кстати, не заметил по ссылке ничего про "не имеет против". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 00:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
AriochМайкрософт ниего против не имеет У МС примеры, которые я подсматривал как раз таки имеют свойство копировать данные (LocalAlloc, LocalFree) и передавать ссылку при работе с потоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 08:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Нечто такое: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 09:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Тем не менее, никаких рекомендаций против использования WM_COPYDATA там нет, ни в общем виде ни ввиде ограничений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 10:52 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka, в общем, я учел твое замечание и допилил малость. Хотя все равно считаю, что твой пример - сие есть ошибка в проектировании: нужен менеджер потоков, который реагирует на занятость/свободность потоков. Шаблон: Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. Тестовый пример прежний, из стартового сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 11:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Читал, читал, и "Не выдержала душа поэта" :) На сколько я понимаю основная мысль TWThread это посылка команды в поток что бы поток эту команду выполнил (асинхронно). Вот альтернативный вариант, так сказать как бы я это сделал: Код: 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. Наследник получается вот таким: Код: 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. Посылаем команду Код: pascal 1. Cделано для XE3 но при определённых доработках можно перенести на более ранние версии. Например в место TValue можно использовать Variant. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 12:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Упс, цикл не правильный поставил, нужно заменить Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. на while Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 12:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат Сафин Код: pascal 1. Сейчас Димонка придет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 12:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Почему интерфейс работы с потоками у всех вас такой заумный? Сделайте по-человечески: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Всё! больше нормальному человеку ничего не надо от потока. А уж пользователь унаследуется от TAbstractJob и добавит свой функционал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:20 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaПочему интерфейс работы с потоками у всех вас такой заумный? Проще и с кучей косяков, которые многие допускают по незнанию - TThread. Куда уж проще. Но ведь кому-то не просто хочется отдать другому потоку некую работу, а и получить результат и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaПочему интерфейс работы с потоками у всех вас такой заумный? Проще и с кучей косяков, которые многие допускают по незнанию - TThread. Куда уж проще. Но ведь кому-то не просто хочется отдать другому потоку некую работу, а и получить результат и т.п. Т.е. с твоим интерфейсом косяков по незнанию будет меньше? Или надо сделать всё настолько сложно, что пока разбираешься в том, что ты сделал, поймёшь как потоки работают? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:30 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaТ.е. с твоим интерфейсом косяков по незнанию будет меньше? Пока что ты нашел один и я его поправил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Почему интерфейс работы с потоками у всех вас такой заумный?Почему интерфейс работы с потоками у всех вас такой заумный? Кому то нравится цвет жёлтый, кому то красный, с интерфейсами такая же фигня :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:34 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaТ.е. с твоим интерфейсом косяков по незнанию будет меньше? Пока что ты нашел один и я его поправил. Основной косяк в том, что если пользователю надо будет добавить функционал к товему потоку, ему надо будет менять твой код. Это, я считаю, в корне неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaИли надо сделать всё настолько сложно, что пока разбираешься в том, что ты сделал, поймёшь как потоки работают? :) Ты ведь не просто критикуешь, а понимаешь что и как? Будем рады увидеть и твой вариант реализации. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaОсновной косяк в том, что если пользователю надо будет добавить функционал к товему потоку, ему надо будет менять твой код. Я как-то не подумал об этом. Ты это серьезно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:39 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaОсновной косяк в том, что если пользователю надо будет добавить функционал к товему потоку, ему надо будет менять твой код. Я как-то не подумал об этом. Ты это серьезно? Ну дык, если ты вдруг скажешь - у меня ещё N косяков обнаружилось в коде и вот она - новая версия, то пользователь тебе скажет "спасыпо". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 13:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaНу дык, если ты вдруг скажешь - у меня ещё N косяков обнаружилось в коде и вот она - новая версия, то пользователь тебе скажет "спасыпо". А, ты все еще об идеальном коде... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 14:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaНу дык, если ты вдруг скажешь - у меня ещё N косяков обнаружилось в коде и вот она - новая версия, то пользователь тебе скажет "спасыпо". А, ты все еще об идеальном коде... Я не об идеальном коде, а о практической стороне вопроса. Если алгоритм пользователя вне твоего кода, то пользователю надо заменить только твой юнит. А если внутри твоего кода, то надо будет редактировать весь код, где использовался твой "шаблон". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 14:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaА если внутри твоего кода, то надо будет редактировать весь код, где использовался твой "шаблон". Пояснить, что такое шаблон? Заканчивай оффтопить, выдвигай пожелания и свои варианты. Описал-же идеальный вариант, похвастайся и реализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 14:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат Сафин, думал, думал над твоим решением... Есть мои мелкие "но" с передачей параметра в поток и получением результата, но в целом весьма изящно. Для меня открытием стало наличие TEvent :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 09:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaА если внутри твоего кода, то надо будет редактировать весь код, где использовался твой "шаблон". Пояснить, что такое шаблон? Заканчивай оффтопить, выдвигай пожелания и свои варианты. Описал-же идеальный вариант, похвастайся и реализацией. Не понимаю, что тебе пояснить? Как наследоваться от TAbstractJob? Код: 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. 14. 15. 16. 17. 18. 19. 20. Получение следующего задания из списка: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. // Добавление задания Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ну и для пояснения: FJobAdded: TEvent; FListLock: TCriticalSection; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 11:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaНу и для пояснения: Поясни, что значат эти куски кода для людей, которые впервые столкнулись с потоками? Это по-твоему решение для новичка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 11:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaНу и для пояснения: Поясни, что значат эти куски кода для людей, которые впервые столкнулись с потоками? Это по-твоему решение для новичка? Так людям и не надо ничего понимать, им надо просто унаследоваться от задания: Код: pascal 1. 2. 3. 4. 5. Я не делаю "шаблон", я просто подсказываю, в какую сторону крутить архитектуру, чтобы твою конструкцию мог использовать не только ты сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 12:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaТак людям и не надо ничего понимать Уровни "написания" кода: 1. API 2. VCL 3. VCL+Component 4. Нанять программиста. Людям, которым не нужно что-либо понимать достаточно пунктов 3 и 4. Я работаю на производстве, где скорость - ключевой фактор и потому п.1 в приоритете. Ты-же не предлагаешь ничего. Лишь толсто троллишь. Какой там по счету(?) и последний раз: есть свой вариант? Выкладывай. Рабочий вариант. Твоего решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 13:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Кстати, а кто-нибудь помнит - в Лазаре есть посылка сообщений потоку? Они под Linux эмулируются или нет? Конечно, своя очередь заданий с синхронизацией доступа в любом случае будет работать, но интересно - будет ли работать под Linux первый вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 13:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
MrCatКстати, а кто-нибудь помнит - в Лазаре есть посылка сообщений потоку? Там не все так просто. В винде все будет работать, а с линуксом придется повозиться http://wiki.freepascal.org/Multithreaded_Application_Tutorial/ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 13:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanЯ работаю на производстве, где скорость - ключевой факторПоясни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 13:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaТак людям и не надо ничего понимать Уровни "написания" кода: 1. API 2. VCL 3. VCL+Component 4. Нанять программиста. Людям, которым не нужно что-либо понимать достаточно пунктов 3 и 4. Я работаю на производстве, где скорость - ключевой фактор и потому п.1 в приоритете. Ниф$%я не понял. Обоснуй, почему твой код будет хоть как-то быстрее работать? :) И твой код к API никакого отношения не имеет. Да и вообще забавная иерархия. Ты забыл в пункте 0. ассемблер добавить и в пункте -1. Голый машинный код. Если уж дело о скорости речь идёт. wadmanТы-же не предлагаешь ничего. Лишь толсто троллишь. Какой там по счету(?) и последний раз: есть свой вариант? Выкладывай. Рабочий вариант. Твоего решения. Я предлагаю твоё месиво кода отделить от кода пользователя. Всё, что ты пытаешься передать в поток через какие-то низкоуровневые примитивы, кодируя типизированные данные, можно легко передавать в нормальном виде через задания. Любой контекст. Ну и это ты хочешь что-то выложить, я ничего выкладывать не обещал. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 13:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57wadmanЯ работаю на производстве, где скорость - ключевой факторПоясни Поясняю: компы дохлые, смартфоны сейчас мощнее, а железячки, подключенные десятками к этим компам, критично относятся к скорости реакции - закрывают обмен по своей воле. DimonkaИ твой код к API никакого отношения не имеет. противоречит следующему Dimonkaты пытаешься передать в поток через какие-то низкоуровневые примитивы Ну да ладно. DimonkaЯ предлагаю твоё месиво кода отделить от кода пользователя. Отклонено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 13:27 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
с линуксом придется повозиться Да вот он меня и интересовал как раз. Если формулировать точнее, то эмулирована ли в LCL PostThreadMessage в сборке под Linux. Под виндой-то это без проблем должно работать - хоть в Лазаре, хоть где, сообщения - родной для неё механизм. В любом случае, можно импортировать из User32.dll. Гугл сообщает, что PostThreadMessage в сборке под Линукс нет, что там вообще "так не принято". А если и проэмулируют её, то фиг знает через какой механизм. Понятненько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 13:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanDimonkaИ твой код к API никакого отношения не имеет. противоречит следующему Dimonkaты пытаешься передать в поток через какие-то низкоуровневые примитивы Первое утверждение перпендикулярно второму. Аббревиатура API никаким образом не накладывает ограничение на типы данных. В общем, успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 14:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. Адаптированный пример под этот модуль из первого сообщения Код: 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. 100. 101. 102. 103. 104. 105. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 11:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, зачем новые замороченные функции для "конвертации" string в LPARAM и обратно? твои прежние были чотче)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chзачем новые замороченные функции для "конвертации" string в LPARAM и обратно? твои прежние были чотче)) Один товарищ нашел косячек в такой передаче. Искал и нашёл. Такой, с которым я на производстве даже не столкнулся. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
и что же мешает написать подробности, а то кто-то использует аналогичный старому метод) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chи что же мешает написать подробности, а то кто-то использует аналогичный старому метод) Погоди, для начала поясни, что ты подразумеваешь под старым и новым методом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
старый Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. новый Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00ch, ответ тут 14903409 В кратце, пока доп. поток работает со строкой как с константой, основной поток может с ней работать как с переменной, т.к. строка для него не залочена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:27 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, не понял, в чем проблема, поясни подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:45 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00ch, теперь и я не понял, откуда тролль Димонка высосал проблему... Действительно её не существует и такой способ для передачи строк таки нормально себя ведет. Проверка. Модуль: Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. Программа: Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. Результат в мемо: автор-> 1 <- 1 -> 2 -> 3 -> 4 -> 5 <- 1 <- 2 <- 2 <- 3 <- 3 <- 4 <- 4 <- 5 <- 5 Никаких потерь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 15:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Немного доработанная процедура. Два некритичных проекта перевел на работу с этим модулем. Из изменений: добавлена процедур DirectTimeOut, которая вызывается после превышения интервала ожидания в этом-же потоке, а не по событию в основном. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 10:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, надеюсь, что это окончательный вариант, "... фактическая бумажка! Броня!!!" (с). А то у меня уже место на винте скоро кончится архивировать этот топег ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 18:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Может, выложить уже на Bitbucket? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 19:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док, в окончательном варианте у меня в execute при вызове sleepex вместо false - true :) почему, хэлп ответит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2013, 10:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanпочему, хэлп ответит т.е. у тебя еще и шкатулка с секретом? Тогда нафиг, сам себе напишу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2013, 11:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. Пример использования: Код: 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. 100. 101. 102. 103. 104. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2013, 10:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, а что произойдет с сообщениями, которые были отправлены ToolWindow в конце Execute, если след.командой будет вызов деструктора, где проиходит уничтожение этого самого ToolWindow? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2013, 14:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chа что произойдет с сообщениями Улетят в пустоту. Так же как и те, которые будут отправлены в поток до создания очереди сообщений для него, т.к. очередь для потока создается с небольшой задержкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2013, 15:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Вы ChangeLog ведёте? Скрываете? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2013, 23:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Gatorwadman, Вы ChangeLog ведёте? Скрываете? :) Таки нет. Впечатление, что такие мелочи не требуют соблюдения формальностей. На вопросы "что как и почему" отвечаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2013, 09:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Поколение Next: Delphi&Lazarus. В виду отсутствия некоторых приятностей в Лазарусе пришлось немного извернуться. Для коммуникации доп. потока с основным прикрутил еще один поток. Модуль: Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. Проект под Lazarus: Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. Проект под Delphi: Код: 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. 100. 101. 102. 103. 104. 105. 106. Результаты в обоих средах разработки одинаковы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2013, 16:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Кстати, кто-нибудь возьмется протестировать под линуксом? Очень хочется узнать результат кросс-платформенности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2013, 17:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Зря на Dimonka наехали, он более грамотную архитектуру предлагал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 03:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerЗря на Dimonka наехали, он более грамотную архитектуру предлагал Ровно с тем-же количеством аргументов можно и опровергнуть эту грамотность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 09:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Я вижу три аргумента. 1. Разделение логики. Нет мешанины в коде. Т.е. шаблон превращается по факту в готовый, расширяемый паттерн. 2. За выноса логики юзер-работы появляется легкая возможность покрытия её тестом. 3. Гм... а вы в команде работали? Сопровождать дешевле граммотную архитектуру Ну в-общем каждый судит со своего опыта. Можно отнестись "работает - да и ладно", а можно продумать на будущее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 11:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerа можно продумать на будущее Для ленивых в инете полно оберток в виде компонент и даже целых библиотек для работы с потоками. Я-же предложил свою модель, без наворотов, но покрывающую большинство мелких задач с минимумом типичных ошибок. У каждого своя ниша. Димонка - тролль, который сочиняет проблемы в голове, а не в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 11:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Насчет спойлера - не знаю, не следил за его постами. Просто в данном, конкретном случае его подход мне больше импонирует. Причины я отписал выше. В любом случае - мир, дружба, жвачка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 12:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanДимонка - тролль, который сочиняет проблемы в голове, а не в коде. Спасибо, конечно, за оценку. Но в век ООП и предметности пересылать из потока в поток практически машинные примитивы - это огромное достижение. То что нужно 99.9% программистов ежедневно. Я вижу сутуацию примерно так: ты придумал проблему, успешно её решил, а все кто считает, что проблемы-то в основном у людей другие, - тролли и негодяи. Жаль что меня забанят, но не мог не ответить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 15:56 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka> Жаль что меня забанят, но не мог не ответить. Не, пока не забанят. Но предлагаю озвучить, какая проблема(ы), по-твоему, более насущна и её (их) решение. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 16:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамDimonka> Жаль что меня забанят, но не мог не ответить. Не, пока не забанят. Но предлагаю озвучить, какая проблема(ы), по-твоему, более насущна и её (их) решение. Одно из решений я уже предлагал выше. Ну а проблемы старые: 1. вынести пользовательский код в поток 2. передать этому коду данные 3. узнать, что код выполнен (данные обработаны) Если первый и третий пункт в "шаблоне" более менее решён, то второй решается, только через извращения (примитивы), которые автор топика называет API. Опять же, данные обработаны, но с передачей результатов работы те же проблемы, что и в пункте 2. Очень не понимаю, почему автор топика так агресивен к достаточно контруктивной (на мой взгляд) критике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 16:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
DimonkaОчень не понимаю, почему автор топика так агресивен к достаточно контруктивной (на мой взгляд) критике. 14918946 Еще раз: у этого решения своя ниша, минимум наворотов и, соответственно, ошибок. Особенно для новичков, которых-то голый TThread запутывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 16:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka> Одно из решений я уже предлагал выше C кодом? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 16:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат Сафин, кстати, твой вариант с TValue/Variant не выдерживает мой тест в дельфи. В лазарусе - все отлично. Потому пришлось отказаться в пользу LParam, чтоб работало одинаково на обоих платформах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 16:42 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамDimonka> Одно из решений я уже предлагал выше C кодом? По крайней мере с кодом возможного интерфейса. Я не обещал дать готовое решение. Просто предлагал способ обойти недостатки данного решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 17:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Какой ешё тест? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 19:44 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат Сафинwadman, Какой ешё тест? Который придумал Димонка 15047828 Если жать "тест" (Button2) подряд 5 раз и вводить с 1о-го по 5-ть, то вылетает ошибка. Текст не помню, но воспроизвести не составит труда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2013, 20:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanМарат Сафин, кстати, твой вариант с TValue/Variant не выдерживает мой тест в дельфи. В лазарусе - все отлично. Потому пришлось отказаться в пользу LParam, чтоб работало одинаково на обоих платформах. Там метод Destroy переделать нужно, сначала вызывать inherited а потом уничтожать объекты, я забыл про эту особенность TThread. то есть вот так: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 07:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Других косяков не нашёл, у меня работает на ура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 07:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka, Писал я год назад такую вот штуку возможно это то, что вы хотели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 09:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. Тестовый проект: Код: 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. 100. 101. 102. 103. 104. 105. 106. Результат: Код: plaintext 1. 2. 3. 4. 5. 6. 7. И "An unexpected memory leak has occured. The unexpected small block leaks are: 13-20 bytes: UnicodeString x 5; 21-28 bytes: Unknown x 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 09:29 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanЭто потому что строки не используются. Тест простой: поставить фокус на кнопку Button2 и поехали! Enter 1 Enter Enter 2 Enter Enter 3 Enter Enter 4 Enter Enter 5 Enter Должно быть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 09:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Я тестировал свой код, а не твой. В твоём коде косяк в использовании PThreadMessage нельзя выделять память через GetMem и освобождать через FreeMem, нужно пользоваться New и Dispose. Возможно есть другие ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 09:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат СафинВозможно есть другие ошибки. Ок, учел замечание по поводу New/Dispose. Memory leak остался. Включи в своем тесте ReportMemoryLeaksOnShutdown и погоняй его со строками, как у меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 10:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanМарат СафинВозможно есть другие ошибки. Ок, учел замечание по поводу New/Dispose. Memory leak остался. Включи в своем тесте ReportMemoryLeaksOnShutdown и погоняй его со строками, как у меня. "Пилите, Шура, пилите. Они золотые" мне за поиск ошибок в вашем коде денег не платят :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 11:44 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат Сафинwadmanпропущено... Ок, учел замечание по поводу New/Dispose. Memory leak остался. Включи в своем тесте ReportMemoryLeaksOnShutdown и погоняй его со строками, как у меня. "Пилите, Шура, пилите. Они золотые" мне за поиск ошибок в вашем коде денег не платят :) Вон оно что! Давай свой код, я найду ошибки в нем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 11:45 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Вопросик: почему используется окно? Не проще ли без окна, но с очередью сообщений и использованием PostThreadMessage вместо PostMessage? Будет ли разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 11:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
host.13Вопросик: почему используется окно? Не проще ли без окна, но с очередью сообщений и использованием PostThreadMessage вместо PostMessage? Будет ли разница? Последний вариант, который мультиплатформенный и вовсе без окон и PostThreadMessage. А тот, что с окном, если его рассмотреть более внимательно, использует PostThreadMessage для отправки сообщения доппотоку, а окно для получения сообщения из доппотока и обработки его в событии основного потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 11:49 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanМарат Сафинпропущено... "Пилите, Шура, пилите. Они золотые" мне за поиск ошибок в вашем коде денег не платят :) Вон оно что! Давай свой код, я найду ошибки в нем. 14906181 учитывая 14906229 и 15056478 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 11:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат Сафинwadmanпропущено... Вон оно что! Давай свой код, я найду ошибки в нем. 14906181 учитывая 14906229 и 15056478 1. Последнее изменение значения не имеет. 2. У тебя нет обратного сообщения основному потоку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 11:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman2. У тебя нет обратного сообщения основному потоку. А с учетом этого замечания не совсем понятно, зачем наворачивать такого потомка, если он отработает свое задание один раз и об этом никто не узнает. Здесь хватит перекрытия классического TThread.Execute. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 11:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanМарат Сафинпропущено... 14906181 учитывая 14906229 и 15056478 1. Последнее изменение значения не имеет. 2. У тебя нет обратного сообщения основному потоку. 1. Если поток чего то делает (тоесть в очереди есть сообщения), и в это время ты ему делаеш Terminate, а потом Free, то имеет. 2. Это не ошибка, а особенность реализации :) Если есть ещё желание ковыряться в чужом коде то по ковыряйся в исходниках поста , там больше вероятность, что есть ошибка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 12:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат СафинЕсли есть ещё желание ковыряться в чужом коде то по ковыряйся в исходниках поста , там больше вероятность, что есть ошибка :) Иди туда, не знаю куда, принести то, не знаю что. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 12:15 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат СафинDimonka, Писал я год назад такую вот штуку возможно это то, что вы хотели. Да у меня сейчас вообще извращённая хотелка - хочется, чтобы всё ещё и в FMX красиво работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2013, 13:42 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Вариант only for Windows дописан и доведен до производственного цикла. Вариант с передачей строк без выделения памяти признан негодным при интенсивном обмене строками, но оставлен в комментариях. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 09:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Ошибку в своём коде с утечкой памяти, ты так и не нашёл, по этому всё переделал. А нужно просто в TWThread.Destroy почистить список FQueue. Что то типа: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 11:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Марат СафинОшибку в своём коде с утечкой памяти, ты так и не нашёл, по этому всё переделал. Тут ты не прав. Пока что есть две версии и вторая не отлажена, признаю, т.к. её предназначение - лазарус. Дойдут и до него руки и тогда совмещу все в одном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 11:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
За подсказку спасибо. Я экстренно еще не убивал такой поток, потому в этом месте утечек не ловил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 11:52 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanВариант с передачей строк без выделения памяти признан негодным при интенсивном обмене строкамишто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 13:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chwadmanВариант с передачей строк без выделения памяти признан негодным при интенсивном обмене строкамишто? SearchEngine после поиска по нескольким тысячам папок и после выдачи результата в тысячу файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 14:44 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanSearchEngine после поиска по нескольким тысячам папок и после выдачи результата в тысячу файлов.ну значит, либо твой энджин где-то течет, либо ты какое-то непотребство в функции передаешь, либо прославленный оптимизатор оптимизирует)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 14:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chwadmanSearchEngine после поиска по нескольким тысячам папок и после выдачи результата в тысячу файлов.ну значит, либо твой энджин где-то течет, либо ты какое-то непотребство в функции передаешь, либо прославленный оптимизатор оптимизирует)) "Старый" способ работает на производстве и ничего с ним не происходит, но там нет таких экстремальных подач ото всюду. Скоро все переведу на праведный способ передачи данных путем создания снапшота, дабы избежать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 15:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
SearchEngine Форма Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. Исходник Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. WThread Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 11:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Забыл добавить... Результат можно скачать тут wadman.ru/files/searchengine.zip ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 11:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. Слегка допиленный для этой "задачи" WThread: Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. Тэги (на всякий): WThread Window WindowProc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 12:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 00:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Guest2013wadman, TAwaitable - реально круто написано, случайно наткнулся... Да нафига все это нужно, когде есть OTL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 00:42 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
asviridenkov, OTL - огромна, а тут нативный коротенький код, и такие возможности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 01:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Guest2013asviridenkov, OTL - огромна, а тут нативный коротенький код, и такие возможности... Ну OTL не зря огромна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 02:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Guest2013wadman, TAwaitable - реально круто написано, случайно наткнулся... Посмотрите лучше вот это . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 06:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Guest2013 TAwaitable - реально круто написано, случайно наткнулся... Кроме как дернуть запрос в фоне, не придумал как еще это применить в реальности. В моей. У меня основная задача потоков - "общение" с основным, т.к. идет длительная работа, которая логируется и при этом вводятся поправки в дальнейшие действия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 09:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Досадно, но я допустил серьезную багу, когда окно для общения создается в основном потоке, а удаляется - в другом. Поправил. В связи с чем для остановки потока должна вызываться процедура StopThread. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. И небольшой бонус. Модуль для логирования, безопасный для многопоточного окружения. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 12:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
WThread: исключена отправка сообщения самому себе при прямом (TimeoutIsDirect = true) вызове DirectTimeOut, когда значение таймаута в самой процедуре меняется. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. superlog: убрал передачу времени в юникс-формате из-за отсутствия поддержки микросекунд. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2014, 14:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, а нет желания выкладывать релизы куда-нить на расшаренный ресурс, а под спойлер класть только очередной измененный кусок кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2014, 22:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
А зачем? Пока тут всё помещается - нет нужды. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2014, 23:01 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, смайлик забыл поставить? имхо, портянку кода можно и в стороннем редакторе посмотреть, а вот готовый юнит удобно сразу из архива прикрутить, чем копипастить код отсюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 08:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докготовый юнит удобно сразу из архива прикрутить, чем копипастить код отсюда Add new -> Unit -> Ctrl-V + Save As Пока не вижу в этом необходимости, т.к. и потребность особая не замечена. Приводится лишь как часть примеров/решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 09:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanне вижу в этом необходимости, т.к. и потребность особая не замечена "... а как дысал, как дысал ..." (с) имхо, любое дело нужно доводить до логического конца, как женщину до оргазма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 16:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докимхо, любое дело нужно доводить до логического конца, как женщину до оргазма У тебя один оргазм, у других - другой... Кто его знает, сколько тут уже на седьмом небе об счастья? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 16:44 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док> смайлик забыл поставить? Нет. Кроме портянок есть ещё и файлы. Сторонние ресурсы тут не нужны и неудобны. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 18:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Не помню, что конкретно менял, но нечто для стабильности DirectTimeOut и смены интервала ожидания в нем. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. superlog, добавлены уровни детализации. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 11:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, я забыл, я уже просил выложить проект на SF? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 12:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Glaysя забыл, я уже просил выложить проект на SF? Не этот, но Гаджимурадов РустамСторонние ресурсы тут не нужны и неудобны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 13:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, "Дрожки! Дрожки!" (с) Демки! Демки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 16:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокДемки! Демки! Дык... Их есть тут. SearchEngine, окно в доп.потоке и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 16:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добавил процедуры InitThread и DoneThread, которые выполняются в контексте потока. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 14:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Убран всем ненавистный goto :) Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. Примеры использования: 1. DirMonitor: запускает два доп-потока. Первый "ищет" новый файл в спец.папке, второй - его обрабатывает. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 2. Запускает окно из другого потока и симулирует "тяжелую" работу в основном. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2014, 10:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, в Лазаре можно из доп.потока напрямую обращаться к приватным полям основного потока и наоборот В дельфях же вроде не так (щас проверить не могу)? Это я к тому, что для FPC может не стоит городить огород? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2014, 17:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
_Док_, тынц давай. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2014, 17:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, "...и опыт - сын ошибок трудных ... " (с) Ты можешь этот тынц сам увидеть, если Лазарь откроешь Вечерком могу выложить тестовый проект (ноут дома). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 09:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокТы можешь этот тынц сам увидеть, если Лазарь откроешь Вечерком могу выложить тестовый проект (ноут дома). Жду... Хоть пойму, при чем здесь приватные поля основного потока. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 09:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, "— Слушай, я русский язык не хорошо знаю… Он пошёл туалет, а Валико постучил дверь и сказал — что тоже… хочет… Такие вопросы задаёте, что неудобно отвечать… даже…" Вечером, все вечером ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 10:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Ну вот например: интерфейс Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. implementation Код: 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. Под основным потоком я подразумевал поток, в котором Гуй отрисовывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док Код: pascal 1. С трудом себе представляю, зачем это нужно. Ведь оно само по себе не о чем не говорит главному потоку, который в это время выполняет мягко говоря такой г-код, чтобы самому догадаться об изменениях переменной: Док Код: pascal 1. 2. 3. 4. 5. 6. Да и по идее этот код должен загрузить процессор. Потому все таки правильнее и проще передать новое значение переменной вместе с сообщением. Или я не до конца разглядел твою мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanкоторый в это время выполняет мягко говоря такой г-код, чтобы самому догадаться об изменениях переменной честно говоря, не понял - основной поток не в силах уследить, что делается с его переменными? зы. Я не спорю, я просто интересуюсь, ибо гуманитарий ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докосновной поток не в силах уследить, что делается с его переменными? Ты привел один из способов самостоятельного отслеживания изменений. Сам понимаешь, вариант совсем не вариант. Все таки сообщения, содержащие новые данные как-то более надежный и простой механизм. Грубо говоря я не увидел применения твоему способу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanТы привел один из способов самостоятельного отслеживания изменений. Ты имеешь ввиду ProcessMessages? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокwadmanТы привел один из способов самостоятельного отслеживания изменений. Ты имеешь ввиду ProcessMessages? Именно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, ну, у меня тогда появился повод переписать код на событийную модель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 22:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докну, у меня тогда появился повод переписать код на событийную модель А было так, как ты показал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 09:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, поскольку в тонкости диспетчеризации сообщений я стал вникать только в последнее время, то в Лазаре (а ЕМНИП, Дельфя описанных мною выше вольностей не позволяла) в тестовых проектах для разнообразия я где-то написал так, а где-то по другому. Теперь, конечно же, придется делать по фен-шую :) зы. Лазарь вообще, отдельная песТня. Я тут виндовые проекты стал портировать в никсы - много интересного познал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 08:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Достаточно часто (но не всегда) в одном и том же месте появляется ошибка. Access violation at address .... in module 'MyExe.exe'. Read of address 0000000F. WThread.TWThread.PostToThreadMessage (Line 393, "WThread.pas") - по EurekaLog версия от 28.07.2014 result := (not Suspended)and(PostThreadMessage(ThreadID, Msg, wParam, lParam)); Не знаю как лечить. Может быть поможете? Раньше использовали предыдущие версии и все нормально работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 14:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим УлитинWThread.TWThread.PostToThreadMessage (Line 393, "WThread.pas") - по EurekaLog А остальное, что было до этого? И что отправляется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 14:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, сейчас отправлю в личку. А так, вкратце там выводится форма с часиками (что типа что-то выполняется и ждите). форма нарисована на winapi. с помощью вашего класса все данные на этой форме обновляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 10:26 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, что-то лички тут не нашел, ладно, тогда так отправлю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 10:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим Улитин, то, что я там увидел - это тотальное непонимание как работать с потоками и памятью... Например: Под параметры память выделяется, а под текст - нет. См. функции NewString, FreeString. Код: pascal 1. 2. 3. 4. 5. 6. 7. Это зачем дергается в другом потоке? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Ниже еще интереснее: зачем sleep? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. На сколько я понял - это тяжелое наследие какого-то участка кода, который когда-то работал в одном потоке и теперь стоит задача разнести на разные? Чтобы найти место, где и из-за чего возникает ошибка вынеси TWindowThread в отдельный модуль и протестируй его на пустом проекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 11:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Взглянул более внимательно... Это стоит переписать с нуля. Совсем. Вынести экспорт в другой поток будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 11:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Ну там все намного проще. раньше все это было написано как класс, в котором запускается отдельной процесс с какой-то логикой. То есть был основной поток с программой, из основного потока создавался поток с нужной процедурой и еще один поток для отрисовки окна. все работало нормально, без каких либо ошибок и все было хорошо. Но пришлось все переписывать, так как если в этом отдельном потоке создавался fastreport с поддержкой мультизадачности (EnableThreadSafe = False), то по полной начинало все глючить. И из-за этого было быстренько все переписано и теперь поток не создается с нужной процедурой, а выполняется в основном потоке. А для отрисовки окна используется Ваш класс. Да, переписано все через ж.., но к сожалению что есть, то и есть. Вначале писал я (с кучей поток), переписывал не я, а человек, который уже был уволен за кучу своих ошибок. N-ая часть этого кода из приложенного файла не используется уже совсем, валяется как мусор или пережиток былого. А почистить времени нет. > На сколько я понял - это тяжелое наследие какого-то участка кода, который когда-то работал в одном потоке и теперь стоит задача разнести на разные? Наоборот, был когда то перевод с кучи потоков на один поток (ну +1 на форму с "часиками") sleep нужен для того, чтобы сообщение нормально отправилось. На некоторых машинах форма просто не успевала создаться (сообщение о показе формы приходило чуть позднее) > Например: Под параметры память выделяется, а под текст - нет. См. функции NewString, FreeString. раньше так все и было, сейчас это не нужно Просто опять же, раньше на какой-то другой версии Вашего класса ошибка не возникала, сейчас возникает. Вот стало интересно почему, отсюда и спросил P.S.: А так, по существу, как то никогда не было проблем как с потоками, так и с дин памятью, так и с тем, как с ней работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 12:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим УлитинПросто опять же, раньше на какой-то другой версии Вашего класса ошибка не возникала, сейчас возникает. Вот стало интересно почему, отсюда и спросил Раньше видимо и код экспорта был иным. В том коде, который приведен ошибки такой быть не может. По меньшей мере при работе именно с wthread (предлагаю протестировать на пустом приложении). А проблемы с памятью имеются и я их показал. Потому и просил стек вызова показать. Скорее всего поток к тому времени не создан, либо убит (то есть равен nil) и обращение к ThreadID вызывает ошибку. wadmanА остальное, что было до этого? Максим УлитинНо пришлось все переписывать, так как если в этом отдельном потоке создавался fastreport с поддержкой мультизадачности (EnableThreadSafe = False), то по полной начинало все глючить. Фастрепорт глючит именно из-за тех-же ошибок, что я и показал. Они тоже любят баловаться Application.ProcessMessages не анализируя EnableThreadSafe. :) Я и его наставил на путь истинный 2 года назад и с тех пор не обновляю. Теперь он работает в потоках. Максим Улитинsleep нужен для того, чтобы сообщение нормально отправилось. Формы можно создавать заранее скрытыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 13:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, код экспорта был таким же с точностью до байта, как и в тех версиях Вашего класса. Кстати еще раз, это не экспорт, а выполнение любых процедур, когда заранее точно не известно выполнится ли эта процедура быстро или нет. На тему Procedure TTimerThread.UpdateForm; - он не используется совсем у меня. Как уже сказал, остались части, надо вычистить. На тему слипа. там идет основной поток программы, а раз так, то могу делать в основном потоке что хочу. Разве нет? На тему ThreadParams^.MessageText := MessageText; ThreadParams - это рекорд, под который выделена память с помощью new. По моему я уже выделил память, в том числе и под строку. А работаю исключительно с указателем на этот рекорд и эту строку. Разве нужно еще раз выделять память под строку уже в выделенной памяти под весь рекорд? > А проблемы с памятью имеются и я их показал. вроде проблем этих нет. могу конечно просмотреть в дебаге в отдельном приложении. Только боюсь под это уйдет уйма времени, так как ошибка на реальных проектах возникает очень часто раз из тысячи, а бывает сразу. > Скорее всего поток к тому времени не создан, либо убит (то есть равен nil) и обращение к ThreadID вызывает ошибку. вполне возможно, надо попробовать поставить проверку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 16:56 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим УлитинThreadParams - это рекорд, под который выделена память с помощью new. Вот тебе и понимание работы с памятью и потоками... String по умолчанию уже давно лишь ссылка на участок памяти с символами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:01 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, > String по умолчанию уже давно лишь ссылка на участок памяти с символами конечно я это знаю > Вот тебе и понимание работы с памятью и потоками оке, тогда объясни что не так? и почему огромное количество времени (с 2006 по 2013 год) предыдущий вариант этого класса (моего класса формы с часами) работал БЕЗ ЕДИНОЙ ПРОБЛЕМЫ? проблема с EnableThreadSafe = false не в счет, тут уже прикол самого фастрепорта, как Вы сами написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим Улитиноке, тогда объясни что не так? и почему огромное количество времени (с 2006 по 2013 год) предыдущий вариант этого класса (моего класса формы с часами) работал БЕЗ ЕДИНОЙ ПРОБЛЕМЫ? Я не знаю как еще объяснить. Что именно тут не понятно? wadmanString по умолчанию уже давно лишь ссылка на участок памяти с символами. Везение это не положительная оценка навыков программирования, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanМаксим УлитинThreadParams - это рекорд, под который выделена память с помощью new. Вот тебе и понимание работы с памятью и потоками... String по умолчанию уже давно лишь ссылка на участок памяти с символами. Если не считать ещё уличной магии массивов, которая подчищает строки при выходе из процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, оке, тогда помоги плиз, если конечно не затрудняю. нужно запускать процедуру в том же потоке, что и основная программа, но при этом создавалась форма, в котором был label с каким-то там сообщением, которое можно менять в любой момент времени, progressbar, который так же можно менять, иконка для красивости и label с временем, который показывало сколько времени прошло с момента запуска данной процедуры. Но при этом в тексте самих этих процедур на запуск ничего переделывать было бы не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka, подробнее пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:27 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим УлитинDimonka, подробнее пожалуйста Локальные строки как и другие динамические массивы уничтожаются при выходе из процедуры. Если строка тебе нужна в потоке, то необходимо сделать копию строки для потока. Просто полистай эту тему - все ответы здесь уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 18:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Dimonka, ну будем считать что мне везло столько лет. Думаю да, Вы правы, но работало ведь Я думаю сделать так: - вернуть свой класс в то состояние, которое было до прихода уволенного сотрудника (жаль что его тогда принял ,к сожалению. до сих пор косяки всплывают). - сделать так, чтобы везде, где есть фастрепорт, запускалась отдельная процедура для вывода инфы (на экран или там в PDF) думаю после этого глюки пропадут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 19:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим Улитин- сделать так, чтобы везде, где есть фастрепорт, запускалась отдельная процедура для вывода инфы (на экран или там в PDF) Если исходники фастрепорта есть, то ищи во всех местах вызов Application.ProcessMessages и делай перед этим проверки на опцию многопоточности. Кажется таких мест 5-6. И станет он белым и пушистым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 09:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, спасибо, так и сделаю. А так вчера почистил код в том модуле и избавился от мусора. И потом понял где проблема, это му.... нехороший человек таймер не прибивал. то есть он вроде написал, чтобы таймер прибивался, но сообщение о прибивании таймера забывал посылать. в итоге написал тестовое приложение с бесконечным циклом на создание массива на 10 лямов рандом значений и сортировку через этот мой класс и оставил на ночь. Ни разу exception не сработал. так что теперь в думах - вернуть что раньше писал или оставить что есть сейчас. как бы и тогда работало надежно, и сейчас работает по первым прикидкам вроде надежно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2015, 10:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Если заюзать юнит в сервисе, обработка сообщений между приложениями работать будет? Спрашиваю т.к. у сервиса нет окна, и я не очень понимаю как сервисы между собой общаются... Возможен ли обмен между 2-мя и более сервисами через этот юнит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 11:52 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Поток в службе..., в службе работает без проблем, между службами не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 19:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
* Убрал утечки памяти, которые были под fpc. + Добавил буфер для отправки сообщений до того, как будет готова очередь + Добавил поддержку *nix для fpc Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 08:56 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, я бы заменил Код: pascal 1. 2. 3. 4. на Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, я этим совсем не пользуюсь. На что это влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, на утечку, разумеется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovна утечку, разумеется Раз назвался груздемзнатоком... Поясни, сколько такая строка может прожить? К примеру, если идет долгая обработка одной команды, а в очереди несколько минут висит следующая с такой строкой - какие гарантии, что не затрется? П.С. Спасибо, учту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:44 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, видимо, тебе намекают, что Result на входе вовсе не обязан быть пустой строкой, и своим хаком ты похеришь старое значение без отработки счетчика ссылок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chчто Result на входе вовсе не обязан быть пустой строкой Это новость для меня... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Не совсем понял, о какой "такой" строке ты спрашиваешь. Если речь об утечке, то там все просто. Строка, которая используется твоей функцией в качестве результата, приходит в нее из вызывающей процедуры и вовсе не обязана быть пустой. Поэтому ее необходимо финализировать, прежде чем жестко менять адрес данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:53 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovНе совсем понял, о какой "такой" строке ты спрашиваешь. О такой, которую получили функцией NewString (FreeString обратная ей). Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Aleksandr SharahovСтрока, которая используется твоей функцией в качестве результата, приходит в нее из вызывающей процедуры и вовсе не обязана быть пустой. Торможу чего-то... Как результат этой функции приходит из вызывающей её процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 12:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
примерно таким: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 13:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
fd00chпримерно таким: Код: pascal 1. Ты мне шаблон поломал... Давно догадывался, но не хотелось верить и копаться там. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 13:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Точно не шутите, что результат может быть определен на входе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 13:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanО такой, которую получили функцией NewString (FreeString обратная ей). А если об этой, то будет жить, пока живо сообщение. wadmanТочно не шутите, что результат может быть определен на входе? А сегодня первое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 13:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanТочно не шутите, что результат может быть определен на входе? http://docwiki.embarcadero.com/RADStudio/XE7/en/Program_Control The following conventions are used for returning function result values. For a string, dynamic array, method pointer, or variant result, the effects are the same as if the function result were declared as an additional var parameter following the declared parameters. In other words, the caller passes an additional 32-bit pointer that points to a variable in which to return the function result. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 13:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovА сегодня первое? Не все ограничиваются только первым числом. Aleksandr SharahovА если об этой, то будет жить, пока живо сообщение. Нужно будет погонять на сотне-другой потоков. Помнится, этот механизм валился на больших количествах передаваемых строк между потоками. Может как раз из-за этой "мелочи"... fd00ch, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 13:29 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, тоже кстати пытался что-то подобное делать у вас я смотрю по теме большой опыт немного с другой стороны подошёл (связь односторонняя и полностью стандартными библами fpc) Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. ну и очередь для этого простая Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. используется в потоке Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 20:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)(связь односторонняя и полностью стандартными библами fpc) У меня двусторонняя и тоже полностью стандартными. :) Особо в код не вникал... Есть какие-то преимущества? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 08:52 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, основное было делить задачи на несколько потоков т.е. 1 диспетчер раскидывает задания на несколько потоков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 17:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)основное было делить задачи на несколько потоков т.е. 1 диспетчер раскидывает задания на несколько потоков Из моего класса можно сделать и отдельный менеджер с ограниченным по количеству пулом потоков. Один-бы рулил всеми и не морозил при этом интерфейс. * Исправил и скорректировал работу по таймеру. Теперь таймер отрабатывает точно (миллисекунда в миллисекунду), учитывая время работы процедур потока. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 13:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
А просто приаттачить файл к сообщению не судьба ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 13:15 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorА просто приаттачить файл к сообщению не судьба ? По себе сужу. Отсюда качаю файлы в редких и исключительных случаях. А так хотя-бы код видно. П.С. Там спойлер есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 13:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, немного посмотрел, слишком жёстко, багфиксы Код: pascal 1. 2. 3. 4. иначе под линуксом не компилится Код: pascal 1. 2. 3. убрать, в SyncObjs описан ( в fpc 2.6 точно) Код: pascal 1. 2. 3. 4. и Код: pascal 1. 2. 3. обрамить в FSection.Enter; try ... finally FSection.Leave; FQueue - очередь лучше в отдельный класс вынести с методами PushToFront, ...(в fpc-stl есть очень неплохие реализации) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 20:49 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)иначе под линуксом не компилится Под каким линуксом не компилится? FPC_WIN = WINDOWS. kealon(Ruslan)в SyncObjs описан ( в fpc 2.6 точно) kealon(Ruslan)обрамить в FSection.Enter; try ... finally FSection.Leave; Учел, подумаю. :) kealon(Ruslan)FQueue - очередь лучше в отдельный класс вынести с методами PushToFront, ...(в fpc-stl есть очень неплохие реализации) Мне в некоторых местах нужен такой подход (с отдельной очередью для гуи) и в дельфи. То есть иногда дефайню FPC. Так что его специфические вещи мне навредят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 08:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmankealon(Ruslan)иначе под линуксом не компилится Под каким линуксом не компилится? FPC_WIN = WINDOWS. этого модуля под линуксом нет, в дефайн FPC_WIN он у тебя не включён (выше вписан) Код: pascal 1. 2. 3. 4. 5. wadmankealon(Ruslan)FQueue - очередь лучше в отдельный класс вынести с методами PushToFront, ...(в fpc-stl есть очень неплохие реализации) Мне в некоторых местах нужен такой подход (с отдельной очередью для гуи) и в дельфи. То есть иногда дефайню FPC. Так что его специфические вещи мне навредят. это не помешает, от TList просто унаследуй для дельфей с определением методов, а для fpc бери нативный PS: мне кажется от окна винды стоит отказаться, ты всё равно уже очередь эмулируешь, да и от таймера(его можно отдельным потоком как источник задач создать, используя sleep или лучше TEvent.wait ) PSS:слишком сложно твоим классом пользоваться, надо упрощать - кода много, а на деле дальше While GetMsg do ... не уйти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 22:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), не хочешь признаваться, как добился, что модуль не компилируется под линуксом и не надо. :) у меня он работает. Модуль сложный, да. Это "плата" за легкость его использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2015, 15:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmankealon(Ruslan), не хочешь признаваться, как добился, что модуль не компилируется под линуксом и не надо. :) у меня он работает. Модуль сложный, да. Это "плата" за легкость его использования. вот твоя редакция последняя Код: pascal 1. 2. 3. 4. 5. я тебе сказал что она не компилится, так как модуля Messages под линуксом нет, предложил подправить, вот так : Код: pascal 1. 2. 3. 4. 5. это всё что имелось ввиду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2015, 20:10 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), еще разок: у меня компилируется (и даже работает) под линуксом, ибо в fpc/lazarus есть модуль messages. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 08:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, при использовании в главной нити сообщения не поступают в файл, пока не пройдет цикл обработки сообщений (что очевидно). Очередь при этом растет. А в ней всего 10000 позиций (по умолчанию), этого может оказаться маловато - будут потери записей лога. Простой выход: меняем Код: pascal 1. на Код: pascal 1. 2. 3. 4. Ну и резалт присвоить нужно для порядка, в реализации Код: pascal 1. При высокой нагрузке будут потери записей все одно. Я себе делал класс лога через очередь, с пишущей ниткой, постоянно ждущей и просыпающейся лишь по эвенту (постановка записи в очередь / терминэйт нити). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 16:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Во как - тема-то вон какая... Это про "15782361" . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 16:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
dred2kпри использовании в главной нити сообщения не поступают в файл, Я как раз и использую отдельный поток. dred2kЯ себе делал класс лога через очередь, с пишущей ниткой, :-) Ну у меня как раз такой и есть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 16:42 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman:-) Ну у меня как раз такой и есть... Я не уточнил - очередь данных (типа TList), а не системная очередь сообщений. При интенсивной записи (в твоей реализации) код обработки, пишущий в файл, "захлебнется" из-за накладных расходов записи - не так это быстро, как ожидается. Очередь сообщений "выбираться" не успеет. PostMessage будет срабатывать не каждый раз, пойдут потери записей лога. Для этой задачи, считаю, надежнее будет обычный threadsafe-буфер + нить записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 16:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
dred2kВо как - тема-то вон какая... Это про "15782361" . Ой... Оказалось, там старая версия, а новее не выложил. Хотя с нагрузкой и эта версия отлично справляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 16:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
В принципе, данный код легко модифицируется для защиты от потерь - через буфер, опять же, с попыткой "досылки" сначала из него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 16:53 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanХотя с нагрузкой и эта версия отлично справляется. Ну это да, как говорится - если "в мирное время". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 16:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmankealon(Ruslan), еще разок: у меня компилируется (и даже работает) под линуксом, ибо в fpc/lazarus есть модуль messages. Unix mint 17.1 Код: plaintext 1. Код: plaintext 1. PS: к dred2k присоединяюсь, такая штука рухнет под нагрузками (но в принципе почти любая очередь рухнет под нагрузками) нужна блокировка при переполнении канала и Код: pascal 1. - всё же очень плохая вещь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 20:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Код: plaintext FPC 2.6.4 и последний лазарус. Компилируется и работает. kealon(Ruslan)к dred2k присоединяюсь, такая штука рухнет под нагрузками Сэмулируй нагрузку, под которой грохнется. А то при опросе пары сотен штук устройств с киданием десятков сообщений в секунду почему-то не падает. Мне интересны факты, а не теория. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 21:01 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanМне интересны факты, а не теория. При использовании обсуждаемой реализации объективно нет возможности гарантировать, что записи лога не начнут пропадать по причине переполнения оконной очереди сообщений. Вот тебе и факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 21:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
dred2kВот тебе и факт. Это не факт, а философия. Из товарища kealon(Ruslan) вытягивал несколько дней факт, почему у него не компилируется. Ну да ладно. Пока логирование в другом потоке не могу выложить, там несколько для меня специфичных вещей. Чуть позже, когда руки дойдут. Либо перепишу на основе wthread. Спасибо за обсуждение. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 08:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, вроде нормальным английским языком, ошибка компиляции wthread.pas(44,6) Fatal: Can not find unit Messages used by WThread. Check if package LCLBase is in the dependencies. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 13:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)вроде нормальным английским языком, ошибка компиляции Обнови лазарус. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 13:29 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmankealon(Ruslan)вроде нормальным английским языком, ошибка компиляции Обнови лазарус. Check if package LCLBase is in the dependencies PS: вот не знаю что ты упираешься, тем более под люниксом эти константы оттуда не нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 19:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)PS: вот не знаю что ты упираешься, тем более под люниксом эти константы оттуда не нужны Есть этот модуль в 2.6.4., но ты одолел меня. Убрал совсем, нет в нем нужды (нужен был только для wm_user). :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 09:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman(нужен был только для wm_user) Соврал, оттуда еще нужен TMessage... В общем учел, спасибо. В следующий раз messages будет вынесен куда следует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 09:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Перенес messages, TList заменил на TQueue и по мелочи. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. Модуль WLog на основе WThread для логирования в отдельном потоке. Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 12:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Почистил. Но таки удобнее иметь файл для скачивания, при портянках таких размеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2015, 19:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, имеешь в виду дублировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2015, 19:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, смотри, ещё такая штучка Код: pascal 1. 2. 3. 4. 5. если заменить на Код: pascal 1. 2. 3. 4. 5. 6. избавит от необходимости проверять инициализацию полей класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2015, 19:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), не понял глубины твоей мысли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 12:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, что по твоему будет если вот это Код: pascal 1. 2. 3. 4. 5. 6. начнёт исполняться раньше чем создастся FMessageEvent вот здесь Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 19:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Код: pascal 1. То есть некто сумеет обратиться к gui-потоку до окончания конструктора TWThread.Create? Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 20:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), это да, но вот так проще, нет ? Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 20:45 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, эва как :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 20:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
dred2k, wadman мда, умываю руки пугает что Fixed in Version 2.6.0 надо будет в дельфи 7 посмореть PS:я всё же лучше по старинке, так оно нам староверам спокойнее :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 21:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), без разницы, когда пофиксили: к гуи-потоку обращение происходит из twthread.execute , когда он уже создан и крутится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 22:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, да в курсе уже, механизм с AfterConstruction понятен, исходники посмотреть как-то мысли не возникало :-) PS: в Delphi7 и раньше всё пучком, косяк в fpc тока был ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2015, 09:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Попробовал модуль засунуть в свою программку на Lazarus. Скомпиленная под Win32 работает без запинки, а вот под wince не хочет. Досконально не проверял из-за временного отсутствия тестовой платформы. Может кто то сталкивался с особенностями PostMessage на wince? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 06:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08Попробовал модуль засунуть в свою программку на Lazarus. Скомпиленная под Win32 работает без запинки, а вот под wince не хочет. Досконально не проверял из-за временного отсутствия тестовой платформы. Может кто то сталкивался с особенностями PostMessage на wince? а как проверял при отсутствии платформы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 06:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecator, проверял на панельке временно неиспользуемой, которая сейчас задействована на производстве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 07:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08а вот под wince не хочет Не хочу, говорит, и все тут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 08:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanНе хочу, говорит, и все тут? явных ошибок не выдает. Экземпляр класса TWThread создается нормально. Застревает где-то на TWThread.Execute, т.к. до DirectTimeOut даже не доходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 09:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08wadmanНе хочу, говорит, и все тут? явных ошибок не выдает. Экземпляр класса TWThread создается нормально. Застревает где-то на TWThread.Execute, т.к. до DirectTimeOut даже не доходит. С какими опциями компилируешь (ОС, семейство процессоров и целевой процессор)? Под fpc PostMessage не актуален, т.к. для общения между потоками работают event-ы и поток GUIThread. П.С. Эмулятор-бы внятный найти... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 09:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanС какими опциями компилируешь (ОС, семейство процессоров и целевой процессор)? ОС - WinCE Семейство процессоров - arm Целевой - По умолчанию скачал вот такой эмулятор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 10:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08wadmanС какими опциями компилируешь (ОС, семейство процессоров и целевой процессор)? ОС - WinCE Семейство процессоров - arm Целевой - По умолчанию скачал вот такой эмулятор На нем проект, состоящий из одной пустой формы запускается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 10:10 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanНа нем проект, состоящий из одной пустой формы запускается? Да, запускается. Сделал тестовый проект. По кнопке запускает поток, который каждую секунду передает время. если нужен, могу скинуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 10:15 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
упс, забыл перелогиниться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 10:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
На эмуляторе работает, теперь и сам вижу. А на устройстве нет? Тогда стоит подключить superlog 15510599 и через него выводить отладочную информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 10:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Соврал, wlog нужен. Он в первом сообщении на этой странице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 10:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanНа эмуляторе работает, теперь и сам вижу. я неправильно выразился в предыдущем сообщении. На эмуляторе у меня тоже не работает. Похоже, что намудрил где-то. Прикладываю проект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 12:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Проблема в TEvent, который для wince. Срабатывает до 12 раз в секунду по сигналу и ни о каком таймауте и речи нет. Подумаю, как обойти... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 13:56 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Собственно адаптировал под wince. wthread.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. 737. 738. 739. 740. 741. 742. 743. 744. 745. 746. 747. 748. 749. 750. 751. 752. 753. 754. 755. 756. 757. 758. 759. 760. 761. 762. 763. 764. 765. 766. 767. 768. 769. 770. 771. 772. 773. 774. 775. 776. 777. 778. 779. 780. 781. 782. 783. 784. 785. 786. 787. 788. 789. 790. 791. 792. 793. 794. 795. 796. 797. 798. 799. 800. 801. 802. 803. 804. 805. 806. 807. 808. 809. 810. 811. 812. 813. 814. 815. 816. 817. 818. 819. 820. 821. 822. 823. 824. 825. 826. 827. 828. 829. 830. 831. 832. 833. 834. 835. 836. 837. 838. 839. 840. 841. 842. 843. 844. 845. 846. 847. 848. 849. 850. 851. 852. 853. 854. 855. 856. 857. 858. 859. 860. 861. 862. 863. 864. 865. wlog.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. Во вложении дублеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 14:49 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, это так и задумано (Create в деструкторе) ? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 19:17 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
dred2k, тут еще есть косячек... Не такой очевидный. Завтра поправлю. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 19:34 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, "косячОк". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 19:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanПроблема в TEvent, который для wince. Срабатывает до 12 раз в секунду по сигналу и ни о каком таймауте и речи нет. Подумаю, как обойти... в багрепорт писали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2015, 19:52 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmandred2k, тут еще есть косячек... Не такой очевидный. Завтра поправлю. Спасибо. А чо, красиво ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 00:27 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)wadmanПроблема в TEvent, который для wince. Срабатывает до 12 раз в секунду по сигналу и ни о каком таймауте и речи нет. Подумаю, как обойти... в багрепорт писали? Написал-бы, если бы знал решение. С отладкой на wince нет желания разбираться (долго и лень), с учетом, что threadmansger и для обычной винды и для ce устанавливается один и тот же (судя по исходникам), то ковыряние тоже будет не быстрым. CE порт в целом глючный. Написав приложение из окна, кнопки и потока с ивентом словил несколько ошибок/недочетов: 1. now не возвращает миллисекунды (кто виноват: fpc, эмулятор или wince?). 2. если окну поставить position в default, то приложение вылетает еще до показа окна. 3. event сигналит как оголтелый. В общем, вот исправленный вариант. wthread.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. 737. 738. 739. 740. 741. 742. 743. 744. 745. 746. 747. 748. 749. 750. 751. 752. 753. 754. 755. 756. 757. 758. 759. 760. 761. 762. 763. 764. 765. 766. 767. 768. 769. 770. 771. 772. 773. 774. 775. 776. 777. 778. 779. 780. 781. 782. 783. 784. 785. 786. 787. 788. 789. 790. 791. 792. 793. 794. 795. 796. 797. 798. 799. 800. 801. 802. 803. 804. 805. 806. 807. 808. 809. 810. 811. 812. 813. 814. 815. 816. 817. 818. 819. 820. 821. 822. 823. 824. 825. 826. 827. 828. 829. 830. 831. 832. 833. 834. 835. 836. 837. 838. 839. 840. 841. 842. 843. 844. 845. 846. 847. 848. 849. 850. 851. 852. 853. 854. 855. 856. 857. 858. 859. 860. 861. 862. 863. 864. 865. 866. 867. 868. 869. 870. 871. 872. 873. 874. 875. wlog.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 09:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Спасибо мил человек, будем пробовать. Если будет без глюков работать, пожалуй заменю коллбэки на твой модуль. О багах отрапортую, если что) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 09:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Решил полностью отказаться от общения между потоками с помощью оконной функции, которая в винде имеет некоторые ограничения, а на линуксе и вовсе не имеет прав на жизнь. И добавил пример использования. Три класса потоков: 1) Менеджер, который управляет остальными потоками. 2) Поток, который ищет файлы и передают их менеджеру. 3. Поток(и), которые получают имена найденных файлов от менеджера для обработки. wthread.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. wlog.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. main.pas (форма с кнопкой и несколько обработчиков) Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 08:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Забыл упомянуть кое-что важное: теперь потоки могут общаться между собой минуя главный поток (VCL/LCL). Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 14:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanРешил полностью отказаться от общения между потоками с помощью оконной функции, которая в винде имеет некоторые ограничения Ограничения, как оказалось, были во мне. Сам наложил фильтр на оконные сообщения... Вернул все на место и подправил пару ошибок. В этот раз без портянок. main.pas - пример использования TWThread. Чтобы он заработал, нужно создать пустой проект, бросить на форму одну кнопку и заменить главный модуль main.pas (названия модуля должны совпадать). В примере демонстрируется создание менеджера потоков, потока для поиска файлов и несколько потоков для обработки найденных файлов: Поток-менеджер собирает список найденных файлов, принимая их названия от потока-поисковика и координирует работу потоков-обработчиков. Всё "общение" между потоками выводится в лог-файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 13:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 13:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Procedure Execute у тебя явно в вне общего контекста... т.е. Слишком громоздкая И зачем там столько IFDEF ? По моему, только глаза мазолят,а польза, на мой взгляд, сомнительна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Valery_B Слишком громоздкая И зачем там столько IFDEF ? На это обратил внимание? Код: pascal 1. Если ТАКИЕ объемы исходников тебя пугают, то никогда не заглядывай в VCL/LCL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Я сказал только про один метод. Он действительно громоздкий. Я бы сделал вот так: Код: pascal 1. 2. 3. 4. 5. + ещё вынес бы пару методов. Что бы в результате в Execute осталось 3-5 строчек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Valery_BЯ бы сделал вот так: Мысль понял, но так в принципе не получится, ибо бряки и континуумы еще нужны. А это сразу +3 строчки в каждый кейс. :) Ну и да, в дельфи все это конечно громоздко выглядит, я предпочитаю последнее время в лазарусе редактировать, там ифдефы учитываются при отрисовке исходников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, согласись, что так гораздо лучше. Твои IFDEF LOG я удалил все принципиально. Можешь вернуть, если надо. У меня на всё про всё заняло 10 минут. Но результат проверить не могу :) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 15:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Valery_BНо результат проверить не могу :) И это печально. :) Это не взлетит, как минимум при общении между разными процессами под виндой, собственно почему я и вернул общение сообщениями. П.С. Если тебе нужен именно такой вариант, то забирай, меняй как хочешь и пользуйся. Но зачем выкладывать нерабочий вариант, который даже не проверен (windows, wince, linux)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 15:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman Но зачем выкладывать нерабочий вариант Как ни странно, это -твой вариант. Я просто разделил его на 5 методов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 15:44 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Valery_BКак ни странно, это -твой вариант. Мой - рабочий и проверенный на всех платформах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 15:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Покажи, тогда какая же строчка всё ломает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 15:52 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Valery_BПокажи, тогда какая же строчка всё ломает ? Хватит жечь напалмом. Твой модуль банально не компилируется, а переделывать и тестировать во всех нужных мне окружениях не вижу смысла. Он даже о сообщениях от других процессов не подозревает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 15:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman Твой модуль Жаль только, что моего здесь ничего нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 16:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Valery_Bwadman Твой модуль Жаль только, что моего здесь ничего нету.Но перед этим Valery_BТвои IFDEF LOG я удалил все принципиально. Можешь вернуть, если надо. У меня на всё про всё заняло 10 минут. Но результат проверить не могу :)А ещё что удалил/поправил? Принцип знаешь? Работает? Не троржь!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 21:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
2wadman Помнится, мы с тобой уже пересекались по этой теме. Глянь со стороны на модуль (D2010 >). Если что-то в комментах упустил - поясню. Нужен внешний _конструктивный_ взгляд (ты по этой теме ближе, так что тебе адресую). Ну, и все присоединяйтесь, разумеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 02:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Для затравки: DoCreate излишен, достаточно виртуального конструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 02:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Беглым взглядом не совсем уловил сути: сендер создается в другом потоке, который создается иными средствами (руками, а не сендером)? То есть это продвинутый обработчик очереди с объектами? Ну и примеры-бы. Куда-ж без них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 09:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, в общем случае, по месту использования - создаем экземпляр, объекты приходят по Post. Все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 11:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanсендер создается в другом потоке, который создается иными средствами (руками, а не сендером)? То есть это продвинутый обработчик очереди с объектами? Это в буквальном смысле использование механизма PostMessage для прозрачной пересылки. Со всеми плюсами (прозрачность) и минусами (очередь на самом деле конечна). Если создать объект Sender-а в нитке и регулярно вызывать его ProcessMessages - события будут приходить и выполняться в контексте нитки (для главной нитки достаточно создания объекта, количество не важно - события приходят адресно). Однако, главное и изначальное применение - создание экземпляра в любой дельфийской форме и дальнейшее использование "асинхронности" в различных операциях с передачей произвольных объектов. В той нитке, в которой создан объект (и в которой вызывается ProcessMessages - для главной нитки не нужно), в той и будут обрабатываться приходящие события. wadmanНу и примеры-бы. Куда-ж без них? Пока, к сожалению, без них. Сделаю, нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 11:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
dred2kСо всеми плюсами (прозрачность) и минусами (очередь на самом деле конечна). Меня удивляет акцент на длину очереди. На моем примере: дохлый целерон, на нем потоков около 120-ти (по одному на чтение и на запись), работа с железками. Нет никаких затыков и даже речи о десятках сообщений в очереди. Хотя, это скорее вопрос архитектуры. Если криво написать, то можно нарваться на любые логические и физические лимиты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 11:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, акцент он не от "красного" словца. Вот представь ситуацию: 1. Нитка получает некие данные и постит их в окно для визуализации. Важно, чтобы "все дошло". 2. Вполне себе штатно вызывается некий внешний вызов (к примеру, экспорт TcxGrid-а, который, к сожалению, ничего "не знает кроме себя") - все, события благополучно не обрабатываются и копятся в очереди, в общем случае - бесконтрольно. И таких ситуаций - хватает. Я считаю, что в общем случае следует использовать надежную схему "очередь событий с хранением" + событие "есть данные в очереди". Ну, а в частных и аккуратно - можно и очередь событий Windows, "как она есть". Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 12:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanХотя, это скорее вопрос архитектуры. Если криво написать, то можно нарваться на любые логические и физические лимиты. Согласен. В "конце концов" все упрется в правильность подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 12:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Из изменений помню только, что лог теперь не дергает закрытие/открытие файла, если в очереди есть сообщения, что ускоряет вывод лога при большом потоке данных. wthread.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. 737. 738. 739. 740. 741. 742. 743. 744. 745. 746. 747. 748. 749. 750. 751. 752. 753. 754. 755. 756. 757. 758. 759. 760. 761. 762. 763. 764. 765. 766. 767. 768. 769. 770. 771. 772. 773. 774. 775. 776. 777. 778. 779. 780. 781. 782. 783. 784. 785. 786. 787. 788. 789. 790. 791. 792. 793. 794. 795. 796. 797. 798. 799. 800. 801. 802. 803. 804. 805. 806. 807. 808. 809. 810. 811. 812. 813. 814. 815. 816. 817. 818. 819. 820. 821. 822. 823. 824. 825. 826. 827. 828. 829. 830. 831. 832. 833. 834. 835. 836. 837. 838. 839. 840. 841. 842. 843. 844. 845. 846. 847. 848. 849. 850. 851. 852. 853. 854. 855. 856. 857. 858. 859. 860. 861. 862. 863. 864. 865. 866. 867. 868. 869. 870. 871. 872. 873. 874. 875. 876. 877. 878. 879. 880. 881. 882. 883. 884. 885. 886. 887. 888. 889. 890. 891. 892. 893. 894. 895. 896. 897. 898. 899. 900. 901. 902. 903. 904. 905. 906. 907. 908. 909. 910. 911. 912. 913. 914. 915. 916. 917. 918. 919. 920. 921. 922. 923. 924. 925. 926. 927. 928. 929. 930. 931. 932. 933. 934. 935. 936. 937. 938. 939. 940. 941. 942. 943. 944. 945. 946. 947. wlog.pas Код: 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. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2016, 09:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Использую твой модуль в своем проекте. Работает пока без нареканий. Небольшое предложение: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Чтобы не менять количество параметров в конструкторе, если включать wlog. И еще не объясни назначение DoneThread. Код из него можно же написать в деструкторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 08:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08Чтобы не менять количество параметров в конструкторе, если включать wlog. wlog без проблем включается. Или ты WTHREAD_DEBUG_LOG используешь? brick08И еще не объясни назначение DoneThread. Код из него можно же написать в деструкторе. Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 08:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
[quot wadman]brick08 Или ты WTHREAD_DEBUG_LOG используешь? В том то и дело, что при тестах, то включал, то выключал директиву. Соответственно компилятор начинает ругаться на несовпадение кол-ва параметров в конструкторе. Так вот, чтобы избежать этого, просто поставить AUseDebugLog: Boolean = True в конструкторе. А разве деструктор не выполняется в контексте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 09:20 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08В том то и дело, что при тестах, то включал, то выключал директиву. Вынеси в wthread.inc и добавь строку в оба модуля {$i wthread.inc} Код: pascal 1. 2. 3. в wlog.pas поправь Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В следующий раз выложу уже с этими изменениями. brick08А разве деструктор не выполняется в контексте? Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 09:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Восстановил совместимость с *никсами (убрал PeekMessage). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 11:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добавил поддержку AffinityMask. Теперь можно раскидывать потоки по разным ядрам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 10:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 17:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)а не пробовали I/O Completion Ports для этого приспособить? Попробовал-бы, если-бы знал "зачем?" :) А почитав https://habrahabr.ru/post/59282/ и вовсе растерялся... Чем оно хорошо и в каких случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 10:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, ну фактически, как я понимаю, конкретно для реализации логера, можно писать сразу в файл асинхронным способом и в потоке обработки только подчищать ресурсы выделенных буферов т.е. алгоритм такой: выделяется блок памяти (условно строка) вызывается операция записи в файл, в которую передаётся выделенный блок поток контроля порта отслеживает какие операции завершились и удаляет отработавшие буферы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)конкретно для реализации логера, можно писать сразу в файл асинхронным способом Асинхронно - это без порядка, что, на мой взгляд, вредно для логирования, где порядок имеет первостепенное значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmankealon(Ruslan)конкретно для реализации логера, можно писать сразу в файл асинхронным способом Асинхронно - это без порядка, что, на мой взгляд, вредно для логирования, где порядок имеет первостепенное значение. ну асинхронно здесь имеется ввиду "не ждать результата", порядок то будет соблюдаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)wadmanпропущено... Асинхронно - это без порядка, что, на мой взгляд, вредно для логирования, где порядок имеет первостепенное значение. ну асинхронно здесь имеется ввиду "не ждать результата", порядок то будет соблюдаться Хорошо, а плюс в чем, если сравнивать с моей реализацией? Что у меня не хватает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanХорошо, а плюс в чем, если сравнивать с моей реализацией? Что у меня не хватает? тут дело в том, что с излишком хватает 1. самое главное - очередь не придётся самостоятельно организовывать 2. возможно работать будет быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)1. самое главное - очередь не придётся самостоятельно организовывать И у меня очередь не своя. :) kealon(Ruslan)2. возможно работать будет быстрее Скорее всего нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanСкорее всего нет. я бы не был так категоричен без тестов, потому и спросил пробовали или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)wadmanСкорее всего нет. я бы не был так категоричен без тестов, потому и спросил пробовали или нет Я-бы попробовал, если-бы мне сказали, что это лучше/быстрее/надежнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:45 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanЯ-бы попробовал, если-бы мне сказали, что это лучше/быстрее/надежнее. микрософт вроде так и говорит msdnI/O completion ports provide an efficient threading model for processing multiple asynchronous I/O requests on a multiprocessor system. When a process creates an I/O completion port, the system creates an associated queue object for requests whose sole purpose is to service these requests. Processes that handle many concurrent asynchronous I/O requests can do so more quickly and efficiently by using I/O completion ports in conjunction with a pre-allocated thread pool than by creating threads at the time they receive an I/O request. вы им доверяете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)вы им доверяете? Они сравнивали с моим решением? Про Оку тоже писали, что это комфортный пятиместный автомобиль и кому верить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, если бы я знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 12:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Системный threadpool однозначно быстрее чем TThread. В нашей библиотеке я его использую, например для многопоточного QuickSort, так там даже на относительно небольших объемах данных видно ускорение, которое с использованием TThread наоборот привело бы к замедлению из-за накладных расходов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 16:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerСистемный threadpool однозначно быстрее чем TThread. Два вопроса... 1. Быстрее в каком качестве? К примеру, нужно проверить информацию в базе и по результату запустить печать. Я делаю просто: один поток проверяет, другой печатает. 2. Как тут (на практике) пул потоков может ускорить процесс? П.С. Пул это нечто, что держит энное количество потоков с режиме ожидания и дергает их по мере необходимости? Тогда не вижу проблем, я именно так и делаю: запускаю потоки в любое удобное мне время и они ждут команды. Обертка, по сути, на это и ориентирована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 18:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanДва вопроса... 1. Быстрее в каком качестве? К примеру, нужно проверить информацию в базе и по результату запустить печать. Я делаю просто: один поток проверяет, другой печатает. 2. Как тут (на практике) пул потоков может ускорить процесс? П.С. Пул это нечто, что держит энное количество потоков с режиме ожидания и дергает их по мере необходимости? Тогда не вижу проблем, я именно так и делаю: запускаю потоки в любое удобное мне время и они ждут команды. Обертка, по сути, на это и ориентирована.Зависит от конкретной задачи. У тебя этот юнит ведь тоже чтоб что-то распараллелить а потом сообщать о выполнении. Создание thread относительно тяжелая системная функция, плюс накладываются делфёвые расходы по созданию объекта. По сравнению с этим распараллеливание через Thread Pooling эффективно и производительнее. В качестве примера я привёл распараллеливание сортировки (также фильтрации, итерирования). Поскольку в делфи нет обертки для этого, поэтому обычно юзают наследников TThread. Если сравнить распараллеливание через системный пул и TThread последний проиграет по быстродействию (точнее непосредственно по запуску и завершению "распараллеленного" куска кода). Для кого-то это может быть критично. В наших продуктах используются оба подхода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:17 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerУ тебя этот юнит ведь тоже чтоб что-то распараллелить а потом сообщать о выполнении. Распараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит. Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах. Все тормоза упираются только в создание экземпляра. Это не существенно в сравнении с основным циклом задач, когда приложение (например служба) стартует один раз и работает до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanРаспараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит. Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах.Системному пулу тоже пофигу что параллелить. Я просто для примера привел пример где у нас юзается. Кстати, надо будет ReplaceString попробовать реализовать через пул (где-то топик был, где попугаями мерялись :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerwadmanРаспараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит. Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах.Системному пулу тоже пофигу что параллелить. Я просто для примера привел пример где у нас юзается. Кстати, надо будет ReplaceString попробовать реализовать через пул (где-то топик был, где попугаями мерялись :)) С юникодом replacestring не получится. С анси (то есть побайтно) - да. Можем помериться на досуге. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerСистемный threadpool однозначно быстрее чем TThreadнет никаких принципиальных препятствий реализовать user space пул не менее эффективно чем ядровый хотя конечно второй даже при абсолютно одинаковой реализации всегда будет чуточку проворнее. но это еще надо суметь так нагрузить чтоб заметить white_niggerвидно ускорение, которое с использованием TThread наоборот привело бы к замедлению из-за накладных расходовwhite_niggerСоздание thread относительно тяжелая системная функция, плюс накладываются делфёвые расходы по созданию объекта. По сравнению с этим распараллеливание через Thread Pooling эффективно и производительнеебудто кто-то заставляет каждый раз создавать потоки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 09:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
vavanнет никаких принципиальных препятствий реализовать user space пул не менее эффективно чем ядровый хотя конечно второй даже при абсолютно одинаковой реализации всегда будет чуточку проворнее. но это еще надо суметь так нагрузить чтоб заметитьНу напиши эфективный пул, сравним на примере той же многопоточной сортировки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 12:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerСистемный threadpool однозначно быстрее чем TThread.Подождите товарищи! О каком системном пуле идет речь, применительно к порту завершения? Порт завершения - это же просто ядерная очередь операций ввода/вывода. Пул потоков для работы с ним один фиг надо создавать самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 13:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57Подождите товарищи! О каком системном пуле идет речь, применительно к порту завершения? Порт завершения - это же просто ядерная очередь операций ввода/вывода. Пул потоков для работы с ним один фиг надо создавать самому.А что с ним не так? " You can also use the BindIoCompletionCallback function to post asynchronous I/O operations. On completion of the I/O , the callback is executed by a thread pool thread." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 13:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_nigger, MSDNThe thread pool maintains an I/O completion portтеперь понятно, что имелось ввиду. Только в этом случае уже не надо самому создавать порт завершения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 14:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerНу напиши эфективный пулменя пока устраивает тот что я использую и не хватало к вороху уже существующих готовых еще один писать хотя 10+ лет назад я юзал именно родной виндовый, правда еще первой версии white_niggerсравним на примере той же многопоточной сортировкинет у меня такой насущной необходимости чтоб этим заниматься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 14:29 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добавил компонент. Теперь можно кидать батоны потоки на форму и дергать таски. :) Task - это задача, которая выполняется в доп. потоке. Задач может быть много и все они выполнятся в порядке очереди. Пример использования: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
думаю заюзать твой класс плюс BrainMM в одном чудовищном 19760178 приложении... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorв одном чудовищном 19760178 приложении... Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmandefecatorв одном чудовищном 19760178 приложении... Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :) софтина с сотнями тыщ потоков, взаимодействующих между собой. правда, внутри каждого потока примитивный простой код. потом расскажу, если получится всё это запустить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorwadmanпропущено... Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :) софтина с сотнями тыщ потоков, взаимодействующих между собой. правда, внутри каждого потока примитивный простой код. потом расскажу, если получится всё это запуститьчую нейронную сеть)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:01 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС.... 19760178 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС.... не ляжет, на серваке со 128 гигами оперативы создалось чуть больше пяти миллионов потоков (которые TThread), четыре процессора по 3.2 ГГц по четыре ядра на каждом плюс гипертрейд на каждом ядре. Суммарная нагрузка была в районе 55-65 процентов. Barmaley57чую нейронную сеть)) Точно, только другой структуры, не классической. Надо опробовать идею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorне ляжет, на серваке со 128 гигами оперативы создалось чуть больше пяти миллионов потоков (которые TThread), четыре процессора по 3.2 ГГц по четыре ядра на каждом плюс гипертрейд на каждом ядре. Суммарная нагрузка была в районе 55-65 процентов.Гы!!! Стек потоков уменьшал с дефолта что-ли? Главное, чтобы стека хватило. Ну и ресурсов на обслуживание всего этого дела ОСь должна отхавать нехило. Тормоза сильно ощущались после этого выкрутаса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Опять таки, очереди сообщений то хватит, чтобы заюзать класс wadman'a? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57defecatorне ляжет, на серваке со 128 гигами оперативы создалось чуть больше пяти миллионов потоков (которые TThread), четыре процессора по 3.2 ГГц по четыре ядра на каждом плюс гипертрейд на каждом ядре. Суммарная нагрузка была в районе 55-65 процентов.Гы!!! Стек потоков уменьшал с дефолта что-ли? Главное, чтобы стека хватило. Ну и ресурсов на обслуживание всего этого дела ОСь должна отхавать нехило. Тормоза сильно ощущались после этого выкрутаса? мышка лагала сильно, а так внешне вроде несильно тормозила. Оракля там ещё запущена, я с другого компа к ней цеплялся, лаги при выполнении запросов были заметные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57Опять таки, очереди сообщений то хватит, чтобы заюзать класс wadman'a? кстати, про очереди в классе вадмана я что-то не подумал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorBarmaley57Опять таки, очереди сообщений то хватит, чтобы заюзать класс wadman'a? кстати, про очереди в классе вадмана я что-то не подумал... Если очереди поломаются, то поменяй в wthread.inc режим на WTHREAD_LIBRARY. Тогда будет использоваться TQueue для общения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Полноценная версия компоненты для батонометателей. Признаться, мне и самому так нравится больше. :) Теперь есть обертка над wthread, которая делает таски (TTask), которые тоже являются компонентами. Пользоваться стало чуть проще и удобнее. Пакет ставится в delphi и в lazarus для простоты. Под *nix пока не проверял. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 17:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
И сами пакеты для delphi и lazarus. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 17:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
На Убунту (16) тоже работает с парой приведений типов. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 21:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Протестировано в следующих комбинациях: Ubuntu 14, 16 (LTS), WinCE 5, Windows XP/7, Delphi XE2, Lazarus 1.6. Работает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 10:39 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, может пора уже на гитхаб? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
серый-серый никможет пора уже на гитхаб? я давно ему об этом говорил. И неплохо бы с демками... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 18:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Доксерый-серый никможет пора уже на гитхаб? я давно ему об этом говорил. И неплохо бы с демками... А какая демка нужна? Вроде уже проще некуда: бросил компоненту, накидал таски (которые как сообщения для потока) и вперед. Без сарказма. Я думал, что теперь всё просто. Без ручного кода, всё в пределах основных принципов дельфи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 20:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanбросил компоненту вот видишь, теперь уже компонента. А я в первый раз об этом слышу, хотя за этим топиком внимательно слежу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 18:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanБез ручного кода а я по старинке, ручками. Только пару функций из твоего модуля использую ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 18:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докwadmanбросил компоненту вот видишь, теперь уже компонента. А я в первый раз об этом слышу, хотя за этим топиком внимательно слежу :) Это появилось ровно на этой странице. Выше описано. ДокwadmanБез ручного кода а я по старинке, ручками. Только пару функций из твоего модуля использую ... NewString/FreeString? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 19:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, в D7 не работает? у меня при установке [Error] wthread.pas(357): Undeclared identifier: 'FHandle' Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 19:45 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Ghost Writer, видимо нет, не тестировал. Завтра посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 19:49 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Почему такой большой? Зачем вы тащите все эти Classes... Немного творчества и, в качестве идеи: Код: pascal 1. 2. Все. Одна функция на все случаи жизни. AsyncCall напоминает, но там опять всякие Classes, SysUtils и т.п., а выше чисто Windows. Набросал эскиз: Код: 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. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 06:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Кар-КарЗачем вы тащите все эти Classes... Один пишет "сделай компонет", другой "зачем classes". :) Далее обсудим, когда расскажешь, на каких платформах это работает и что это делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 09:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Допилил под Delphi 7. Демо-код такой-же, как и под ubuntu и wince. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 12:39 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
К моему удивлению, компонент установился и заработал в Lazarus на Ubuntu Mate 15.04 на миниПК с ARM процессором. Пришлось только добавить в файл lpr проекта перед uses строчку {$DEFINE UseCThreads}, иначе приложение с тестовым примером вылетало с ошибкой RunError(232). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 15:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
gssboxПришлось только добавить в файл lpr проекта перед uses строчку {$DEFINE UseCThreads}, иначе приложение с тестовым примером вылетало с ошибкой RunError(232). В wthread.pas warning имеется, но на него видимо мало кто обращает внимание в окошке компиляции... Код: pascal 1. 2. 3. 4. 5. А вообще, об этом пишется почти в каждой теме про лазарус и многопоточность. "Подошел к писуару, расстегни ширинку". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 15:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Вот кстати интересный момент когда раскомментил cthreads в файле wthread.pas: Код: pascal 1. 2. 3. 4. 5. то ошибка вылетала все равно, помогло только описанное выше изменение в файле WThreadTask.pas: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 15:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
gssboxВот кстати интересный момент когда раскомментил cthreads в файле wthread.pas: Тут и не поможет. Модули cthreads и cmem должны быть самыми первыми модулями для проекта, а не для модуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 16:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Ну так cthreads и был первым для проекта(см. выше), но заработало без ошибок только после добавления {$DEFINE UseCThreads} перед uses. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 16:10 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
gssboxНу так cthreads и был первым для проекта(см. выше), но заработало без ошибок только после добавления {$DEFINE UseCThreads} перед uses. "Был" не значит, что использовался. О чем спор? Что я не достаточно тонко намекаю на этот факт текстом сообщения? gssbox Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 16:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Да спора нет, просто поделился информацией. Я на Lazarus только начал работать и у него есть свои не очевидные для меня нюансы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 16:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
gssboxДа спора нет, просто поделился информацией. Я на Lazarus только начал работать и у него есть свои не очевидные для меня нюансы. Меня давно уже посещала мысль, что вместо warn нужно сделать некомпилируемую конструкцию. Чтоб сразу (и хотя-бы раз) бросалась в глаза. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 16:42 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanЭто появилось ровно на этой странице. Выше описано. Точно. Это ты меня красивыми картинками от сути отвлек ;) wadmanNewString/FreeString? вот шайтан-малай, откуда знал, а? зы. когда перелез на Лазарь, дал себе зарок: минимум сторонних компонентов, все ручками. В искушение вводишь зыы. спасибо за труды. Дельная вещь. Пора на лазарныхевых форумах об этом компоненте трубить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 18:15 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докзы. когда перелез на Лазарь, дал себе зарок: минимум сторонних компонентов, все ручками. В искушение вводишь зыы. спасибо за труды. Дельная вещь. Пора на лазарныхевых форумах об этом компоненте трубить... Для лазаря что бесплатно, то всё родное. :) ЗЫ, всегда пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 19:27 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док, тыж вроде на 1.7 сидишь? Вот поддержка 1.7 :) П.С. И теперь не нужно править файл проекта на предмет Define UseCThreads под *никсами. "Само". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 16:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
gssboxДа спора нет, просто поделился информацией. Я на Lazarus только начал работать и у него есть свои не очевидные для меня нюансы. везде свои особенности. то, что ты пишешь - есть в faq по лазарусу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 19:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
makhaongssboxДа спора нет, просто поделился информацией. Я на Lazarus только начал работать и у него есть свои не очевидные для меня нюансы. везде свои особенности. то, что ты пишешь - есть в faq по лазарусу. В принципе он верно поступил описав свой опыт Хотя теперь в этом уже нет необходимости. "Само" делается. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 19:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Говорят, выкладывать вечером в пятницу обновление - плохая примета. Заметил, что processorCount в никсах всегда возвращает 1. Поправил. Добавил возможность отправки своего сообщения из потока. Ну и редактор тасков довел до ума. Демка прилагается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 17:01 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добавил общий параметр ко всем задачам (TWCThread.Param) и метод для ожидания не аварийного завершения задач (TWCThread.WaitAllTasks). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 11:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Убрал мемлик, перекроил код, убрал весьма досадную ошибку, прикрутил пару демок (в т.ч. и обновлялку в два потока и фоновое формирование lazReport). Кажется, уже можно серьезно пользоваться. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 14:26 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Из за строки Код: pascal 1. в модулях где указан wthread и используя переменную с типом THandle, думаешь, что это будет System.THandle, а на самом деле TEventHandle. Думаю, нужно поправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 05:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08Из за строки Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 05:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08Думаю, нужно поправить. Согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:52 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
В связи с новой темой про потоки вспомнилось, что и я чего-то допилил за это время. Но не помню что. Факт в том, что фоновые работы (печать, работа с БД и т.п.) теперь переделал на компонент wcthread. И это работает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2016, 15:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
попробовал вашу библиотечку, таски подергал правильно я понимаю что таски выполняются последовательно и сам тред после того как таск закончил свою работу не убивается а висит в памяти и ждет возможного повторного запуска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 17:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
энди, всё верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 18:27 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Ну в принципе никакой трагедии я не вижу, тред все равно создается при первом запуске, т.е даже если в программе вагон тасков то в пуле будут только те которые запускались хоть раз. Вот думаю не замирить ли как-нибудь таски с экшенами, все же для дельфи это более родное понятие, да и зачастую весь функционал программы разбит именно на экшены, а так получится 2 дублирующих списка, список экшенов в каждом из которых фактически запуск таска. Наблюдается некоторая избыточность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 19:20 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
энди, нет никакого пула. Таск - это компонент-обертка над сообщением потоку. Запускаешь таск - по сути отправляешь сообщение потоку. Обработка сообщения (таска) идет в контексте доп.потока. При чем тут экшены, ума не приложу. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 19:45 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Ну пулом я это назвал из соображений того что тред не убивается а остается в памяти для последующих запусков :) А про экшены я это сказал к тому что в принципе стандартная программа это посути набор TAction, прибитых к тулбарам, меню и прочему. При переделке такой программы на таски посути каждый TAction будет преставлять собой одну строчку c вызовом таска. А в описании формы будет двойной список из TAction и TTask с практически идентичными именами и фактически завязанных друг на друга. Вот я и подумал не нарисовать ли наследника на TActionList с возможностью назначения TTask для запуска. Если не назначен то работает стандартный функционал, а если назначен то просто идет его запуск и не надо прописывать OnExecute. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 09:05 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
эндиВот я и подумал не нарисовать ли наследника на TActionList с возможностью назначения TTask для запуска. Если не назначен то работает стандартный функционал, а если назначен то просто идет его запуск и не надо прописывать OnExecute. Если я верно понял, то не дергай сам Execute у таска, иначе это будет не многопоточка. Чтобы задача отработала в другом потоке, таск нужно запускать только через Start. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 11:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Да про start у таска я уже вчера понял, я имел ввиду Execute у TAction ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 12:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Что-то у меня не получилось нормально поймать exception райзнутый в таске, они где-то глушатся и не рерайзятся при завершении работы таска с ошибкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 17:17 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
эндиони где-то глушатся и не рерайзятся при завершении работы таска с ошибкой? Конечно. Лови сам и передавай в vcl через TTask.PostMessage -> OnMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 17:20 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ок, завтра поэкспериментирую но спасибо за приятную обертку :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 17:29 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
эндино спасибо за приятную обертку :) Не за что. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 17:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Я вот тут что подумал, а может имеет смысл передавать exception пойманный в потоке не через messages, а в finish самого потока, тогда не надо перехватывать сообщения. Да и получится чуток логичнее, поток все равно завершился, но только с exception<>nil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2017, 23:20 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
энди, поток на этом не останавливается. Что мешает присвоить Param любое свое значение на выходе из OnExecute? Этот же Param и будет в финише. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 10:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Просто получается что для того чтобы поймать raise из потока мне надо перехватывать messages. А мне на самом деле сообщения из потока вообще не нужны, мне надо просто запустить и понять в конце выполнения потока были ошибки или нет, вот и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 14:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
эндиА мне на самом деле сообщения из потока вообще не нужны, мне надо просто запустить и понять в конце выполнения потока были ошибки или нет, вот и все. Как ты хочешь это понять, если обратную связь не хочешь получать? Попробуй из наследника TThread поймай exception. :) Хинт: он молча схлопнется. П.С. Ты кажется не понял концепцию моего потока: он работает (или спит) до конца работы приложения. Таск - это не поток, это сообщение для потока. Если хочешь обратную связь от таска (сообщения), придется потрудиться написать еще один обработчик. Иначе никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 18:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, авторПопробуй из наследника TThread поймай exception. :) Я ловлю их и перезапускаю рухнувшие потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 21:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
makhaonwadman, авторПопробуй из наследника TThread поймай exception. :) Я ловлю их и перезапускаю рухнувшие потоки. Каким образом ловишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 21:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Обрабатываю OnTerminate, в нём при существовании FatalException считается, что поток упал. Создаю новый инстанс, присваиваю ссылку на поток ему. Стоит счетчик перезапусков, если он достиг порога - то считается, что поток умер фатально и перезапустить его автоматически не представляется возможным. Так обрабатываются несколько критичных потоков. Работает нормально. Сервера, работающие 365/7/24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 22:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Но ведь посути ты возвращаешь мне информацию 2 способами, через messages и через finish таска, так почему надо возвращать информацию об ошибке внутри таска именно через messages, а не через finish? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 00:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
эндитак почему надо возвращать информацию об ошибке внутри таска именно через messages, а не через finish? Дак что тебе мешает получить информацию через finish? Код: pascal 1. В Param в OnExecute ты можешь присвоить что угодно на выходе и оно в финише передастся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 09:17 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
makhaonТак обрабатываются несколько критичных потоков. Интересный подход, но не лучше-ли если не писать не падающий код, то хотя-бы не убивать и запускать поток лишний раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 09:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Не падающий код это утопия :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 10:00 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Код максимально чистится, и продолжает. Абсолютное большинство вопросов почистилось еще у себя на тестах. Стараемся исправлять каждое. Но, к сожалению, единичные исключения всё еще бывают, хотя в последнее время всё реже. Не всё удаётся найти. "хотя-бы не убивать и запускать поток лишний раз" Я поток не убиваю. Если в execute случается необработанное исключение - то поток заканчивается и убивается сам. Можно, конечно, все исключения ловить и не выпускать 'за' execute, но это плохой подход. В случае, например, AV это почти гарантированно закончится фатально для всего сервиса. Перезапуск потока же часто спасает ситуацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 12:17 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Посидел повертел тут таски на реальных задачах и понял что меня смущает. 1) word передаваемый в start потока, зачем? если еще один доп параметр то за ним вроде как вариант идет и можно там его гонять если очень хочется что-то в таск передать. 2) variant в качестве входного параметра не сказать чтобы очень удобен, я привык параметры гонять с помощью коллекций и обычно пользую тупо TParams из db.pas. Он позволяет иметь кучу типов параметров, читаем и пишем как хотим без всякой сериализации/десериализации в Variant 3) Зачем вообще все эти входные параметры если можно иметь банальный набор значений в той же форме и зачитать их уже в самом таске. Вопрос многопоточности в этом случае не стоит так как таски выполняются последовательно. 4) Идеальным вариантом параметра для start выглядит имя процедуры которую таск уже запускает внутри себя в отдельном потоке. Тогда не надо на каждый чих заводить отдельный таск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 19:53 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
энди1) word передаваемый в start потока, зачем? Можешь не использовать. Там три варианта Start, один из них без параметров. энди2) variant в качестве входного параметра не сказать чтобы очень удобен, я привык параметры гонять с помощью коллекций и обычно пользую тупо TParams из db.pas. Он позволяет иметь кучу типов параметров, читаем и пишем как хотим без всякой сериализации/десериализации в Variant В варианте можно передать и массив. И массив массивов. И т.д. :) энди3) Зачем вообще все эти входные параметры если можно иметь банальный набор значений в той же форме и зачитать их уже в самом таске. Вопрос многопоточности в этом случае не стоит так как таски выполняются последовательно. Они выполняются относительно доп.потока последовательно, но для основного потока они выполняются параллельно. Задача на смекалку: Код: pascal 1. 2. 3. 4. 5. 6. Какое значение будет в SomeValue, когда запустится таск первый и второй раз? подсказка, не подглядывай Для первого раза там в 99% случаев будет уже 3, для второго будет 3 уже 100% энди4) Идеальным вариантом параметра для start выглядит имя процедуры которую таск уже запускает внутри себя в отдельном потоке. Тогда не надо на каждый чих заводить отдельный таск. Этот вариант уже сделан. В обработчике OnExecute, который и является процедурой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 10:47 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Ну у меня в основном потоке красивая форма прогресса отрисовывается с анимацией, так что очереди тасков у меня не будет даже чисто теоретически. Так что проблемы с глобальными переменными быть не может. Да и передавать через вариант скажем набор разнотипных объектов или переменных не так чтобы совсем уж логично. Хотя конечно это личное дело каждого. На самом деле лвиная доля типовых тасков это типовые операции с датасетом, открытие например. Так что таск на открытие можно иметь один, просто передавать в него датасет который там уже и открывать попутно отрисовывая красивое окно ожидания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 12:30 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
энди, не понимаю. Предлагаешь урезать функционал под тебя? Перепиши как хочешь, исходники полностью доступны. Уж извини, что тоже пользуюсь библиотекой и не ограничиваюсь только одним случаем. И копирование файлов идет фоном в два потока, и непрерывная печать на упаковке, и формирование выгрузок в эксель и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 13:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
да не, я не претензии, все равно спасибо за либу, снимает головную боль а так да, я уже кривенького наследника накропал под свои типы задач :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 19:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, иконки не было в комплекте или она потерялась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 22:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докиконки не было в комплекте или она потерялась? Не было. На кой она? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 09:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Убрал StopThread (Terminate удобнее). Добавил возможность стартовать поток 2 из потока 1 с обратной связью в поток 1 (а не VCL/LCL). Тут нужно понимать, что используется механизм сообщений и обратная связь идет через очередь потока 1. Убрал жуткую ошибку, которая тянулась с самого начала, но вылезла только на стресс-тесте в внезапным закрытием, когда потоки во всю "общаются". Ну и исправления по мелочи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 08:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, из simpledemo - В TaskDemoTimerExecute поменял с 1000 на 5000: Код: pascal 1. 2. При закрытии приложения - падает при вызове GetTerminated автор--------------------------- Debugger Exception Notification --------------------------- Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00456F74 in module 'Project1.exe'. Read of address 00000050'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 10:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
sql2012, логично. Компонента то шлепнута. Либо замени слип на работу с проверкой терминатора, либо увеличь интервал ожидания в finishalltasks в деструкторе формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 11:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 11:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Залил на гитхаб: https://github.com/wadman/wthread/ Из последних изменений: поток для синхронного вызова vcl/lcl перевел в режим singleton. Как раньше не догадался? При большом количестве потоков большой и не нужный расход памяти и дескрипторов. Теперь таски по умолчанию принудительно прибиваются при Destroy, если не вызвать явно ожидание их работы (FinishAllTasks, WaitAllTasks). Раньше было наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 13:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добавил TWEvent.WaitForMultiple, который, соответственно, работает только со своим классом. Подходит для синхронизации нескольких потоков TWThread, TWCThread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 11:17 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
А можно для тормознутых и бестолковых пояснить, чем отличается от ThreadPool, QueueUserWorkItem, QueueUserAPC, etc ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 12:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
schiА можно для тормознутых и бестолковых пояснить, чем отличается от ThreadPool, QueueUserWorkItem, QueueUserAPC, etc ? Не я писал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 12:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanschiА можно для тормознутых и бестолковых пояснить, чем отличается от ThreadPool, QueueUserWorkItem, QueueUserAPC, etc ? Не я писал. А точнее - не трогал, не сравнивал. Решал свои задачи. Мне для полного счастья не хватает пула и, соответственно, авто-балансира. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 12:44 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanschiА можно для тормознутых и бестолковых пояснить, чем отличается от ThreadPool, QueueUserWorkItem, QueueUserAPC, etc ? Не я писал. +100500 Я тут по наводке white_nigger в одном из постов заинтересовался возможностью запускать асинхронное выполнение кода, не создавая вручную потомков TThread, через QueueUserWorkItem, довольно интересно в несложных случаях. Прочитал про то, что у тебя рабочие потоки живут до конца работы процесса, заинтересовался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 13:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
schiПрочитал про то, что у тебя рабочие потоки живут до конца работы процесса, заинтересовался. Не совсем до конца процесса, а до сигнала. Они не мешаются, есть-пить не просят, пока спят. Будить-то дешевле, чем создавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 14:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanЗалил на гитхаб: https://github.com/wadman/wthread/ Не прошло и пяти лет! Молодец что-таки сподобился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 16:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerwadmanЗалил на гитхаб: https://github.com/wadman/wthread/ Не прошло и пяти лет! Молодец что-таки сподобился С появлением 2-го и 3-го места, где мне нужны мои исходники, пришлось перейти на процесс синхронизации... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 16:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, тебя поздравить можно, вошел в список классиков :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2017, 20:26 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
А чего рейтинг не 5 звёзд? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2017, 13:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, пять. Просто они серенькие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2017, 17:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамА чего рейтинг не 5 звёзд? :) рейтинг ты ставишь сам, когда устанавливаешь компоненту. Видимо, народ не заморачивается с этим, ибо похоже на лайки в соцсетях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 08:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Доктебя поздравить можно, вошел в список классиков :) Приятно, конечно... И странно, что не связались. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 08:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Поставили совместимость с карбоном. Неужто под макосью проверили или от фонаря? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 09:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanНеужто под макосью проверили или от фонаря? попроси Gallerman'a проверить, помнится, у него на виртуалке макось стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 09:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Вадман, посоветуй, как лучше всего в основном потоке дождаться окончания единственного запущенного таска. При этом в основном потоке идет отрисовка окна с анимированным гифом. Пока ничего тупее бесконечного цикла до Task.IsFinished=true c sleep и aplication.processmessagess в теле цикла голову не приходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2017, 12:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
энди, у таска соответствующее событие есть. Чем не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2017, 13:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
код-лапша получается, хотел чтобы читаемость была получше, вроде task.start ожидаем окончания работы таска вывод/обработка результатов работы таска сам таск у меня достаточно унифицированный, т.е обработка результатов разная, а execute таска унифицирован да вот хотя бы типичный пример есть таск обеспечивающий открытие массива датасетов, но при этом есть задача как просто открыть ряд справочников, так и например открыть пачку справочников и после этого еще заполнить например комбобоксы для фильтров. А плодить разные таски не хочется, и так читаемость кода ужасная :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2017, 16:20 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
энди, я уже тёплый, но... Задействовать другой поток и processmessages для ожидания его завершения? Это за гранью. Либо либо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2017, 17:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Да я пожалуй не совсем удачно применил Ваш модуль, скорее мне больше подойдет AsyncCalls для моей специфики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2017, 17:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Хвастану слегка: на макосях тоже работает. И реальные пользователи так или иначе связываются и отписываются о багах. :) Остается только вопрос с freebsd. Не ясно, бага в сырцах fpc (скорее всего) или в ос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 15:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Интересно, кто таки следит за пакетом в онлайн менеджере лазаруса? Почти по пятам обновляют... Док, не ты, случаем? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 10:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanДок, не ты, случаем? :) не-а :) Я тут сгоряча Алексу пообещал иконки для Rxlib обновить в соответствии со нынешними лазарусовскими стандартными, день ушел на адаптацию к inkscape (привык за много лет к CorelDraw'у), пока весь в работе. Кстати, может заодно и тебе сделаю. Хорошо бы ты прислал какой-нить эскиз какой. У меня есть наметки, но фантазия уже не та ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 17:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокУ меня есть наметки, но фантазия уже не та Не думаю, что у меня лучше. :) Примерно так когда-то хотел нарисовать. Квадраты/потоки: 5-2-1 или 5-3-1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 17:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Или черно-белое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 17:42 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
А если как-то так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 17:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокА если как-то так? Буквы на иконках мне кажутся излишками, если они не касаются строк ввода. :) А "поток" на холсте 16х16 вообще сложно придумать оригинально... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 17:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, имхо, иконки должны быть ассоциативно-интуитивно понятными. Поэтому там часто используются практически одни и те же распространенные обозначения (благо, в Лазаре картинки фриварные и выложены в свободный доступ в LCCR в SVG-формате). Буковки здесь, скорее, играют роль графического "префикса". Ладно, дойдут руки, потом поговорим :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 18:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 22:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док, ближайшие пару недель далек от компа. Как в лазаре, глаз за который цепляется? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 00:53 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanКак в лазаре, глаз за который цепляется? :-) Если в контексте общей цветовой палитры, то последний. Но по информативности мне больше первый нравится. Кстати, под Лазарь требуемые размеры иконок 24, 36 и 48 px. Напомгни мне, если не трудно, размеры под дельфи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 09:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
_Док_wadmanКак в лазаре, глаз за который цепляется? :-) Если в контексте общей цветовой палитры, то последний. Но по информативности мне больше первый нравится. Кстати, под Лазарь требуемые размеры иконок 24, 36 и 48 px. Напомгни мне, если не трудно, размеры под дельфи Последний раз рисовал 16х. В последних версиях может быть иначе с поддержкой hdpi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 11:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Тогда сделаю полный набор, добавлю еще 16 и 32. Так всё-таки, какую делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 13:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док, пусть будет первый. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 09:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 16:56 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Дорожные знаки какие-то) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 17:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
YuRockДорожные знаки какие-то) скорее что-то падает оптом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 18:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докwadman, художника может обидеть каждый (с) разверни чтобы стрелки вверх были имхо будет гораздо лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 18:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear Penguinразверни чтобы стрелки вверх были Лучше слева направо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 18:45 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear Penguinразверни чтобы стрелки вверх были знаешь, почему нельзя заниматься сексом прилюдно? Считаешь, что дефолтовая информативнее? YuRockДорожные знаки какие-то) на всех не угодишь :) В мелких иконках вообще сложно отобразить какие-то детали, даже с 32 битами цвета, поэтому там всегда получается все очень условно. Можно, конечно, сделать по типу узнаваемого логотипа. Подожду, что скажет начальник транспортного цеха :) В любом случае, это просто моя инициатива. Не понравится, забью на нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 09:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear Penguinразверни чтобы стрелки вверх были YuRockЛучше слева направо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 09:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Доки даже перевернул... Этот вариант мне более по душе. Спасибо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 08:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanЭтот вариант мне более по душе. архивчик приложил. Если надо, подкину векторные исходники ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 13:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокwadmanЭтот вариант мне более по душе. архивчик приложил. Если надо, подкину векторные исходники http://www.sql.ru/forum/actualfile.aspx?id=21384173] Приложенный файл (wthread.7z - 7Kb) Влепил иконку. Спасибо, Док! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 13:34 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, обращайся, если дизайн потребуется обновить. Я тут немного с Rxlib-скими иконками поднаторел. Теперь знаю, куда идти, если профессию потребуется сменить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2018, 00:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док, А что, есть свежий RxLib? А оно ещё актуально? В смысле половина вроде уже нативно встроена, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2018, 17:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
alekcvpВ смысле половина вроде уже нативно встроена, не? я имел ввиду форк Алексея Логунова под Лазарь https://svn.code.sf.net/p/lazarus-ccr/svn/components/rx/trunk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2018, 19:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добрый день! подскажите как можно реализовать с помощью компонента такой порядок работы: обработка выполняется в потоке с периодичностью (например 10 минут) при этом пользователь может по кнопке принудительно запустить эту же обработку. требуется ли внешний таймер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 10:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
FreestylerДобрый день! подскажите как можно реализовать с помощью компонента такой порядок работы: обработка выполняется в потоке с периодичностью (например 10 минут) при этом пользователь может по кнопке принудительно запустить эту же обработку. требуется ли внешний таймер? Версия Delphi какая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 11:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
X-Cite, Delphi 7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 12:42 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Freestyler, Опиши задачу подробнее и, особенно, нужны ли тебе две одновременные параллельные описанные обработки. В противном случае достаточно (и проще, надежнее) будет одного только таймера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 13:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Vlad F, Обработка по сути вызов хранимых процедур из БД. параллельно две обработки не нужны: в том случае если пользователь нажал кнопку когда уже выполняется обработка - нужно дождаться завершения обработки и по ее результатам или повторный запуск или обработка не требуется. следующий интервал запуска обработки наступит через 10 минут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 14:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Freestyler, Резюмирую, скрипач поток не нужен, по таймеру запускается упомянутый алгоритм, дизейблит пользовательскую кнопку, отрабатывает свое, енайблит кнопку, рестартует таймер до следующей итерации. При нажатии кнопки сходным образом дизейблиться/енайблиться таймер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 14:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Freestyler, вот без компонента: Код: 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. "если пользователь нажал кнопку" - то вызываем WakeUp. Freestylerнужно дождаться завершения обработки и по ее результатам или повторный запуск или обработка не требуется Это уже навороты, делай сам. Например, нужен дополнительный Event, которого ждать в начале WakeUp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 15:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Vlad F, Спасибо. в таком варианте будет блокировать работу приложения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 16:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
YuRock, Спасибо за пример! +- такой вариант работает сейчас. была мысль переложить доп. потоки на компонент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 16:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Freestylerв таком варианте будет блокировать работу приложения А я тебя переспросил, и ты сказал что приложение все равно ждет окончания обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 16:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Freestyler+- такой вариант работает сейчас. была мысль переложить доп. потоки на компонент. Больше компонентов, хороших и разных!!)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 16:56 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Vlad F, безусловно автору спасибо за компонент! хотелось попробовать применить в проекте. задача думаю типовая для многих - периодически что-то делать (подтягивать) в фоне при этом чтобы была возможность пользователю это сделать явно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 18:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
FreestylerДобрый день! подскажите как можно реализовать с помощью компонента такой порядок работы: обработка выполняется в потоке с периодичностью (например 10 минут) при этом пользователь может по кнопке принудительно запустить эту же обработку. требуется ли внешний таймер? Можно. Достаточно метода Task WaitMS и проверки флага Terminated перед запуском задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2019, 20:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, то есть процедура вида Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. как тогда лучше сделать принудительный запуск (по кнопке) ? просто проверить если задача не завершена то не делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2019, 20:36 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Freestyler, подумав на трезвую голову я-бы все таки сделал с таймером, но который запускает задачу в потоке. Плюс кнопка, которая запускает задачу и сбрасывает таймер. Так проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2019, 08:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Отсюда Докдемок в комплекте OPM нету что ли? а, нет, вижу. Правда у меня только SimpleDemo запустилось без установки доп.компонент. Кстати, если трижды нажать на DemoTimer, то получим отлуп Код: pascal 1. 2. 3. 4. 5. По-моему, я тебе про это уже говорил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2019, 00:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док Отсюда Докдемок в комплекте OPM нету что ли? а, нет, вижу. Правда у меня только SimpleDemo запустилось без установки доп.компонент. Кстати, если трижды нажать на DemoTimer, то получим отлуп Код: pascal 1. 2. 3. 4. 5. По-моему, я тебе про это уже говорил. Много кто говорил. Там системный слип для имитации тяжелой работы. Нужно заменить самой работой с проверкой терминатора задачи/потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2019, 00:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Поднял старый проект, который использовал wthread странно он как-то работает. Запустил simpledemo из комплекта wthread И оказалось, что он задачи выполняет последовательно, а не параллельно. Наверное, в чём-то есть замес ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 08:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorИ оказалось, что он задачи выполняет последовательно, а не параллельно. Один компонент = один поток. Задача = сообщение, сообщения обрабатываются в порядке очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 09:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmandefecatorИ оказалось, что он задачи выполняет последовательно, а не параллельно. Один компонент = один поток. Задача = сообщение, сообщения обрабатываются в порядке очереди. что-то я такое подозревал. руки тому оторвать, кто писал прогу с одним компонентом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 09:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorруки тому оторвать, кто писал прогу с одним компонентом "... от Питера до Москвы..." © ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 10:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecator, Мих, ты всегда был тру-программистом. WThread, имхо, достаточно унифицированный компонент для быстрого решения шаблонной задачи. Зачем тебе он? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 10:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докdefecator, Мих, ты всегда был тру-программистом. WThread, имхо, достаточно унифицированный компонент для быстрого решения шаблонной задачи. Зачем тебе он? :) авторПоднял старый проект , который использовал wthread видимо так было не всегда ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 11:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докdefecator, Мих, ты всегда был тру-программистом. WThread, имхо, достаточно унифицированный компонент для быстрого решения шаблонной задачи. Зачем тебе он? :) попросили проект поглядеть, который не работает так, как надо А там я обнаружил, что используется wthread полез изучать демки, чтобы понять, что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 11:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039179]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
273ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 733ms |

| 0 / 0 |
