|
not enough timers available
|
|||
---|---|---|---|
#18+
Fastmm сообщит только о том, что он сам выделил. А утечки хэндлов надо ловить другими средствами. Process Explorer хотя бы покажет, чего именно там так до фига выделено. авторВ процедуре ничего нет особо криминиального, что можно из дельфи проковырять: обращение к Windows.SetTimer(). попробовал перед вызовом сделать Application.ProcessMessages, но это не помогает. Ставишь бряк внутри Timer.Enable с выводом в лог и смотришь, сколько таймеров реально активировалось. Уменьшить кол-во таймеров можно, но для начала надо убедиться, что именно в этом беда ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 10:36 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svd Но в этом случае fastmm не сообщает ничего полезного. Держите каркас модуля, остальное допишите сами Код: 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.
Под x64 не проверялось. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 10:50 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
_Vasilisk_, Спасибо за помощь попробую присобачить, но чуть попозже. Наткнулся на такю штуку. Это продолжение вот этой истории. В общем создал я для эксперемента трэд и внего переместил все создание фреймов: Код: 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.
вот такие пироги с катятами. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 11:51 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svd В общем создал я для эксперемента трэд и внего переместил все создание фреймов: ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 12:01 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
Уйююй, какой гневный поток проклятий на мою голову. Эксперимент есть эксперимент. В этом и суть. И ничего немешает разобраться почему же все таки "нельзя". А можен даже и "можно", но "осторожно". В любом случае никто от эксперимента не погиб, неудобно было тестировать, так как csv пришлось использовать "на коленке" в виде zip файлов. _Vasilisk_Зачем? Если все создание у вас происходит в главном потоке? И VCL не умеет работать не в главном потоке. Вообще. Никак. Как видно, коллега, очень даже "как". Если учесть, что создаваемым в потоке VCL ничего отображать не требуется. Вообще то с помощью трэда удалось немного ускорить процесс загрузки, секунд на 10. Но это показатели в симуляции на моем компе, а не на реальном железе. Нужно все таки понять, что мешает таймеру нормально стартовать. @_Vasilisk_ по поводу UWinDbg, я так понимаю в нем нужно гдето в контейнепах типа TList сохранять значения хэндлов? у меня есть нечто подобное в фремворке и именно для отладки, когда выясняю, что в запущеном что то теряется, то я вызываю специальную процедуру, которая в текстовый файлик записивыет стек при создании компонента. имя файлу задаю связанное с хэндлом. При разрушении объекта удаляю файл и смотрю что осталось на диске. Запускается, конечно, медленно, но проколы находит четко. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 12:34 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svd Нужно все таки понять, что мешает таймеру нормально стартовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 12:40 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
rgreat, именно. Но это единственный фрейм, который сбойнул. Сейчас проверяю другие, где тоже есть таймер. Такой фрейм с 4-мя добавленными подфреймами внутрь нормально прокатил и даже не матюкнулся. Что есть у него, чего не хватило первому? Нужно еще попытаться разбить создание такого фрейма на несколько шагов: создание с synchronize, создание в потоке[без synchronize, где это должно проходить параллельно] , и создание перед показом формы[однозначно synchronize, уже добавил виртульный метод]. В последней я как раз и переместил все операции с базой данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 12:55 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
*челодлань* Поначалу было еще нормально, ну мало ли есть жирных систем с прорвой форм... но создание фреймов в потоке это уже клиника. Это ведь вместе с букварем должно было быть выучено. И вопрос уже другой пошел - как ускорять загрузку тонны визуального и БД-шного дерьма, которое без всякой задней мысли запихнули в стартап приложухи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 13:45 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svdИ если в такой ситуации таймер с интервалом 800мс проводит обработку свое функции 1.5 сек. - это ненормально. А ты понимаешь, что это неизбежно? Что все сообщения всех твоих таймеров помещаются в одну очередь сообщений и выполняются в главном потоке последовательно? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 13:48 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svd Код: pascal 1.
Есть понимание, что делает эта процедура? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 15:34 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я то понимаю, но другие человеколюди этого не хотят понимать и даже пытаются их в какую-нибудь трэд помещать чтоб организовать таймаут. А потом отрывают меня с вопросом "почему не работает". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 15:35 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
wadman, эта процедура и делает магию в тех частях, где "нельзя использовать VCL в трэдах". Но самое интересное, что параллельная загрузка происходит быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 15:37 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
Магии не существует в программном коде. Таймеры работают в потоках, но требуют цикл обработки сообщений там же. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 15:52 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svd Всем привет. Очень большой проект, с кучей юнитов и компонентов. Думаю по этому глупо приводить здесь код. На формах и фреймах лежат созданные в дизайнере TTimer. Фреймы создаются "вручную" и добавляются на форму в единичном экземпляре. Сооствественно объекты TTimer тоже создаются не в множественном числе, без create/free. Всего таймеров в проекте 18. И вот меняя все лишь порядок создания фреймов вываливается исключение 'not enough timers available'. происходит это при попытке включения таймера: Код: pascal 1. 2.
Кто-нибудь знает причину, почему такое это может происходить и вообще как это можно побороть, кроме замены таймеров на tthread? маленькая реплика в сторону, первая проверка - лишняя достаточно Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:02 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, теоретически "да" если делать новую реализацию класса. Но логичнее вызвать SetTime/KillTimer, хотя там можно и дичь типа SetWaitTimer поробовать[не уверен, что сработает, как планировалось] . А самое логичное решение в цикле самого трэда организовать проверку наступления события. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:11 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svdя то понимаю, но другие человеколюди этого не хотят понимать Если ты это понимаешь, то почему порешь чушь про "800 миллисекунд", "один таймер остановился остальные работают" и прочее "обновление экрана"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:19 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я должен правильно описывать логику работы модулей, как ее видят разработчики. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:23 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
svd я должен правильно описывать логику работы модулей, как ее видят разработчики. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:35 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
топикстартер? Ты окна ненужные с ненужными таймерами убивать не забываешь??? Самое простое CloseAction := caFree; Пока окна ты не убиваешь, и таймеры в экземплярах висят... (сорри, я не всю ветку фанатично прочёл) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 17:23 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
...а ещё есть тема: var JJJ: int64; JJJ := MAXINT; For i := 0 to JJJ+12 do TTimer.Create(..... Вопрос в студию: а) почему и нет? б) почему зашкал? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 17:33 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
Makar4ik ...а ещё есть тема: var JJJ: int64; JJJ := MAXINT; For i := 0 to JJJ+12 do TTimer.Create(..... Вопрос в студию: а) почему и нет? б) почему зашкал? Лучше "For i := 0 to JJJ+42 do" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:54 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
rgreat Makar4ik ...а ещё есть тема: var JJJ: int64; JJJ := MAXINT; For i := 0 to JJJ+12 do TTimer.Create(..... Вопрос в студию: а) почему и нет? б) почему зашкал? Лучше "For i := 0 to JJJ+42 do" Дописывай уже до конца. Код: pascal 1. 2. 3. 4. 5. 6. 7.
Так переполнения не будет - вряд ли до этого дойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 19:25 |
|
not enough timers available
|
|||
---|---|---|---|
#18+
YuRock rgreat пропущено... Лучше "For i := 0 to JJJ+42 do" Дописывай уже до конца. Код: pascal 1. 2. 3. 4. 5. 6. 7.
Так переполнения не будет - вряд ли до этого дойдёт. Хватит прикалываться. У человека, скорее всего, как раз экземпляры форм не убиваются, а вы... (ну, и я...) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 00:09 |
|
|
start [/forum/topic.php?fid=58&msg=40120564&tid=2036665]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
136ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 252ms |
total: | 504ms |
0 / 0 |