|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
В архиве нет exe. Сорри. Приложил. Хорошо, что я этого не знал. В ActiveX EXE используется маршаллинг вызовов поэтому если один поток выполняет работу другой будет ждать. Это лишает смысл использования многопоточности. Поэтому я у тебя спросил покажи мне как у тебя взаимодействовали потоки. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 17:44 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
А это что за ребус? Это для того чтобы избежать оптимизации компилятора, т.к. в опциях у меня стояла полная оптимизация. VB6 не предполагает что кто-то внутри может обратится к переменной Process . Если этого не сделать то компилятор увидит что внутри цикла переменная не изменяется и остается False поэтому он ее заменит на константу (сделает по сути бесконечный цикл) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 17:50 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Вспомнил, я же делал пример своей многопоточности: 10555629 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 18:03 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
По-моему как раз это костыль использовать формы и таймеры для асинхронного запуска процедуры, также в примере я не увидел разделяемых данных. Все глобальные данные разделены и нет общих данных. Для работы мне придется копировать данные туда-сюда, также в IDE это работает только в 1-м потоке, новые потоки не создаются. Учитывая затруднения при регистрации на новых системах не вижу никаких преимуществ. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 18:45 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
ATM-TURBO 2 По-моему как раз это костыль использовать формыЭто было для простоты сделано, чтобы не возиться с лишними объектами или апи. ATM-TURBO 2и таймеры для асинхронного запуска процедурыНу да, без таймера туго. ATM-TURBO 2 также в примере я не увидел разделяемых данныхПример для других целей делался, там даже нет обращения к основному потоку из вторичных. ATM-TURBO 2 Все глобальные данные разделены и нет общих данных.Эээ... общие и разделяемые это одно и тоже или нет? "Глобальные" предполагаются быть в основном потоке, их нужно запрашивать через объектную модель. Вместо Sleep втыкаешь Set mHost = GetObject(, "Cliserv.Host") и юзаешь интерфейс Host. ATM-TURBO 2Для работы мне придется копировать данные туда-сюдаНе понял. Откуда куда? ATM-TURBO 2также в IDE это работает только в 1-м потоке, новые потоки не создаютсяСдается мне, IDE не умеет цепляться к нескольким потокам принципиально, поэтому . Если у clsTask не менять инстансинг, то это вообще в IDE работать не должно, он же NotCreatable, а создается через CreateObject (через New будет создан в основном потоке, в том числе в exe). Из-за CreateObject для IDE он представляется левым COM-классом, экземпляр которого создать невозможно. Надо было для отладки разделить CreateObject и New через #If, не догадался. А для отладки все равно удобней один поток. Когда дебажишь многопоточное приложение в дотнете, сильно раздражает, что один и тот же шаг нужно повторить во всех потоках, только после этого первый поток перейдет на следующий шаг. ATM-TURBO 2Учитывая затруднения при регистрации на новых системах, не вижу никаких преимуществ.Это админские-то права - затруднения? На самом деле есть еще одно затруднение, о котором ты не в курсе. ROT тоже работает лишь под админом, но есть какой-то иной способ, который используется офисом. Офис в ROT не лезет, однако GetObject работает. Но, я не выяснял, что это за способ. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 19:48 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Скачал tlb, подключил. В IDE многопоточность не будет работать, но запуск все равно возможен просто в том же потоке. При запуске IDE вылетает в астрал. Не вижу никаких преимуществ (с) :) Насчет одного потока - сдается мне, IDE тупо не умеет цепляться к нескольким потокам, потому принудительно крутит код в одном. И потому еще раз: пусть эти товарищи-реаниматоры положат крупный прибор на собственную IDE. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 19:56 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
AntonariyБаян, велосипедист опоздал на 4 года. Здесь автор сделал многопоточность, не рушащую IDE: http://bbs.vbstreets.ru/viewtopic.php?f=54&t=43507 А учитывая то, что многопоточность можно сделать вообще без костылей (в ActiveX exe), ценность библиотеки ТСа стремится к нулю. Так получается, что в обсуждаемой статье готовой вариант DLL / bas не был представлен? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 20:14 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
mihlonAntonariyБаян, велосипедист опоздал на 4 года. Здесь автор сделал многопоточность, не рушащую IDE: http://bbs.vbstreets.ru/viewtopic.php?f=54&t=43507 А учитывая то, что многопоточность можно сделать вообще без костылей (в ActiveX exe), ценность библиотеки ТСа стремится к нулю. Так получается, что в обсуждаемой статье готовой вариант DLL / bas не был представлен?Получается да, я выдал желаемое за действительное. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 20:24 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
авторЭээ... общие и разделяемые это одно и тоже или нет? Это одно и тоже. Данные общие но некоторые требуют атомарного доступа, а некоторые нет. автор"Глобальные" предполагаются быть в основном потоке, их нужно запрашивать через объектную модель. Вместо Sleep втыкаешь Set mHost = GetObject(, "Cliserv.Host") и юзаешь интерфейс Host. А ты знаешь что тут имеет место быть маршаллинг и если основной поток будет что-то делать и необрабатывать оконные сообщения, или будет делать запрос другому клиенту то запрашивающий поток будет простаивать и ждать. Также будут копироваться данные. Например если мне нужно иметь общий массив то я вынужден его буду копировать туда сюда юзая интерфейсные Property Get/Let. авторЭто админские-то права - затруднения? Да. Ты знаешь надежный способ обхода этих ограничений? авторROT тоже работает лишь под админом, но есть какой-то иной способ, который используется офисом. Офис в ROT не лезет, однако GetObject работает. Но, я не выяснял, что это за способ. Ты можешь придумать сам какой хочешь способ, просто ROT уже есть, но ты можешь сам создать такую таблицу вручную. авторПри запуске IDE вылетает в астрал. Не вижу никаких преимуществ (с) :) Эта версия старая (которая используется во фрактале), используй либо DLL что в первом посте, либо используй модуль на который я выложил ссылку в первом посте. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 20:47 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
ATM-TURBO 2А ты знаешь что тут имеет место быть маршаллинг и если основной поток будет что-то делать и необрабатывать оконные сообщенияА он не должен делать ничего такого, чтобы даже оконная процедура не обрабатывалась. Зависший интерфейс это ахтунг. В моем представлении поток должен быстро забрать, что ему нужно, выполнить свою работу, быстро вернуть результат и самоубиться. ATM-TURBO 2Да. Ты знаешь надежный способ обхода этих ограничений?Да. Залогиниться под админом, установить, разлогиниться. Не вижу в этом проблемы. ATM-TURBO 2Например если мне нужно иметь общий массив то я вынужден его буду копировать туда сюда юзая интерфейсные Property Get/Let.Или не копировать, модифицируя его через те же пропертя. Или получить указатель и гадить прямо в память :) Но тут скорее всего я как раз и наткнусь на ошибки совместного доступа, придется это разруливать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 21:11 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
А он не должен делать ничего такого, чтобы даже оконная процедура не обрабатывалась. Он может делать все что угодно,. он может обрабатывать в этот момент событие от другого потока или нескольких потоков. Да. Залогиниться под админом, установить, разлогиниться. Не вижу в этом проблемы. Ну залогинится под админом это и есть проблема. К тому же, как ты написал что для регистрации в ROT нужны права. Получается что права нужны всегда, а не только на момент установки. Или не копировать, модифицируя его через те же пропертя. Ага и для того чтобы скопировать один элемент массива нужно будет делать маршалинг через границу апартамента (тормозить поток, транспортировать параметры, ждать ответа). Это будет катастрофически медленно нежели использовать прямую запись как у меня. Или получить указатель и гадить прямо в память :) В любом случае это медленней непосредственного обращения. Получаются что данные находятся в одном АП, лежат "бок о бок" а для доступа к ним нужно делать столько работы. Заметь, я не говорю лишней , потому что это не так просто VB6 стандартными средствами непозволит работать напрямую с общими данными и все обращения заранее синхронизированы. Получается как-бы аналог работы не в разных потоках, а в разных процессах. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 22:19 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
ATM-TURBO 2 Он может делать все что угодно,. он может обрабатывать в этот момент событие от другого потока или нескольких потоков.Он НЕ ДОЛЖЕН делать все, что угодно. Он должен НЕМЕДЛЕННО отвечать на действия пользователя, а потоки подождут, они нервничать не умеют. А обработка событий другого потока должна занимать считанные миллисекунды. Если время обработки сравнимо со временем работы потока, а не меньше на несколько порядков, то это говно, а не архитектура, и потоки тут не нужны. ATM-TURBO 2Ну залогинится под админом это и есть проблема.А мужики-то не знают и пишут инсталляторы под админов. ATM-TURBO 2 К тому же, как ты написал что для регистрации в ROT нужны права.К тому же я написал, что есть и другие способы, админских прав не требующие. ATM-TURBO 2Это будет катастрофически медленноБудет. Значит не надо так делать в случаях, критических с точки зрения производительности. ATM-TURBO 2В любом случае это медленней непосредственного обращения.Ой вей, вот это новости. Это и есть непосредственное обращение. А с помощью CopyMemory еще более непосредственое. Непосредственней только rtlMoveMemory. x = ObjPtr(obj) - > Set obj = ObjFromPtr(x) и у тебя ссылка на тот же самый объект, что в основном потоке, хотя для объектов этот финт ушами не нужен. Примерно такая же фигня с массивом: VarPtr(arr(0)) - указатель на начало массива, обратную операцию не помню, но суть та же. А в случае с VB насчет "непосредственного" нужно говорить с очень большой осторожностью - чуть более чем половина операций идет через функции рантайма. С переменными типа Variant - вообще все. А вот эта невнятная телега: Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 01:34 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Поднял тут давно забытое обсуждение этого способа, там более детально расписывали минусы. Видимо, по большому счету ты таки прав, твой кирпич лучше. Был бы он у меня, когда была нужна многопоточность, рекламировал бы его. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 01:40 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
авторК тому же я написал, что есть и другие способы, админских прав не требующие. Ну так и не привел реализацию. Возможно что реализация этого метода займет дополнительно несколько кСтрочек кода. авторА мужики-то не знают и пишут инсталляторы под админов. Ну да, получается что для простой утилитки, которая к примеру работает с интернетом нужно делать целый инсталлятор. На многих системах получить админские права достаточно проблематично поэтому сейчас очень актуальны всякие обходы UAC и т.п. авторБудет. Значит не надо так делать в случаях, критических с точки зрения производительности. А как надо тогда? авторЭто и есть непосредственное обращение. А с помощью CopyMemory еще более непосредственое. Непосредственней только rtlMoveMemory. x = ObjPtr(obj) - > Set obj = ObjFromPtr(x) и у тебя ссылка на тот же самый объект, что в основном потоке, хотя для объектов этот финт ушами не нужен. Примерно такая же фигня с массивом: VarPtr(arr(0)) - указатель на начало массива, обратную операцию не помню, но суть та же. Во первых ты не можешь использовать ссылку на объект в другом потоке без маршаллинга, потому что это может привести к краху. Во вторых если данные расположены в произвольном порядке, то тебе для работы с ними придется попотеть. Но это все равно в разы мендленней чем непосредственно написать A = B, да, да и не CopyMemory, ни GetMem не ускорят процесс. Ты конечно можешь замапить массив, но это уже усложнение программы и также медленней непосредственного обращения. Если твой код использует рантайм и код в другом потоке использует рантайм то ты не получишь замедления за счет доступа, так что рантайм тут не причем. КОгда я пишу что-то типа: pubVar = locVar + locVar2 то тут рантайм вообще не юзается. Также если захотеть то можно вообще отказаться от рантайма и не использовать его вплоть до исключения его из импорта. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 07:24 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
AntonariyVB6 в коме, его IDE убога, а электрошок к нему пусть применяют те, кому это интересно. Мне нет, я здесь просто делюсь багажом уже ненужных мне знаний.Вчера был в Библио-Глобусе. Не видном месте стояла книга "Visual Basic 6", переизданная в 2014 (!) году. На верхней полке тоже что-то стояло по VB6, я поленился ради них тащить стремянку.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 10:18 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariyVB6 в коме, его IDE убога, а электрошок к нему пусть применяют те, кому это интересно. Мне нет, я здесь просто делюсь багажом уже ненужных мне знаний.Вчера был в Библио-Глобусе. Не видном месте стояла книга "Visual Basic 6", переизданная в 2014 (!) году. На верхней полке тоже что-то стояло по VB6, я поленился ради них тащить стремянку.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 11:46 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Вероятно, я скажу банальность, но если книгу кто-то переиздает, значит книгу кто-то покупает.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 13:37 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Да VB6 такой же яп как и другие, просто не поддерживается больше мелкософтом. На VB6 можно написать любую программу (ну кроме 64-битных, но если применить смекалку то думаю можно и такую написать). В сети есть куча библиотек для него и аддин-ов. Сейчас я разрабатываю адд-ин для расширенной компиляции. Я думаю если получится то можно вообще много каких вещей делать что раньше было невозможно, к примеру инлайн асм-вставки, замена рантаймовских функций своими, создание секций в файле и многое другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 13:49 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Shocker.ProВчера был в Библио-Глобусе. Не видном месте стояла книга "Visual Basic 6", переизданная в 2014 (!) году. На верхней полке тоже что-то стояло по VB6, я поленился ради них тащить стремянку.... Переиздание старой скорее всего. К сожалению, что-то типа пикрелейтеда не переиздадут. А ведь книга офигенная по-своей глубине, именно по-внтуренностям VB6. Недавно подарил ее одному программеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 14:02 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
EoltНедавно подарил ее одному программеру.Ну вот, а я ведь так просил! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 14:04 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Shocker.ProEoltНедавно подарил ее одному программеру.Ну вот, а я ведь так просил! Ну так я тему создавал чтобы отдать книжки, никто с этого форума не пожелал встретиться и забрать их. Пришлось отдать другому человеку. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 14:06 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
ATM-TURBO 2Сейчас я разрабатываю адд-ин для расширенной компиляции. Я думаю если получится то можно вообще много каких вещей делать что раньше было невозможно, к примеру инлайн асм-вставки, замена рантаймовских функций своими, создание секций в файле и многое другое. Я вот жду твой аддон, круто если можно будет добавлять в VB-проект внешние .lib и чтобы вызывать функции можно было не через секцию эскорта экзешника. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 14:10 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
ATM-TURBO 2... VB6 единственный в своем роде, он COM (ActiveX)-ориентированный и других таких нет и не будет... ну если не будет так об чем речь? там еще кто то про нативность кричал а мужики в курсе что дот нет натив появился? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2015, 14:09 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
капитанская дочкатам еще кто то про нативность кричал а мужики в курсе что дот нет натив появился? если ты про это , то не появился ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2015, 15:05 |
|
Многопоточность на VB6.
|
|||
---|---|---|---|
#18+
Eoltкапитанская дочкатам еще кто то про нативность кричал а мужики в курсе что дот нет натив появился? если ты про это , то не появился ага с той лишь разницей что появился а когда говоришь нативный новый вб вылупится? ну ну ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2015, 16:35 |
|
|
start [/forum/topic.php?fid=60&msg=38971241&tid=2155298]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 316ms |
total: | 441ms |
0 / 0 |