|
|
|
Шаблон класса для работы с потоком (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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38424914&tid=2039179]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 355ms |

| 0 / 0 |
