powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Многопоточность на VB6.
25 сообщений из 73, страница 2 из 3
Многопоточность на VB6.
    #38971097
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В архиве нет exe.
Сорри. Приложил.
Хорошо, что я этого не знал.
В ActiveX EXE используется маршаллинг вызовов поэтому если один поток выполняет работу другой будет ждать. Это лишает смысл использования многопоточности. Поэтому я у тебя спросил покажи мне как у тебя взаимодействовали потоки.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971106
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А это что за ребус?
Это для того чтобы избежать оптимизации компилятора, т.к. в опциях у меня стояла полная оптимизация. VB6 не предполагает что кто-то внутри может обратится к переменной Process . Если этого не сделать то компилятор увидит что внутри цикла переменная не изменяется и остается False поэтому он ее заменит на константу (сделает по сути бесконечный цикл)
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971118
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил, я же делал пример своей многопоточности: 10555629
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971152
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-моему как раз это костыль использовать формы и таймеры для асинхронного запуска процедуры, также в примере я не увидел разделяемых данных. Все глобальные данные разделены и нет общих данных. Для работы мне придется копировать данные туда-сюда, также в IDE это работает только в 1-м потоке, новые потоки не создаются. Учитывая затруднения при регистрации на новых системах не вижу никаких преимуществ.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971188
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 работает. Но, я не выяснял, что это за способ.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971198
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скачал tlb, подключил.
В IDE многопоточность не будет работать, но запуск все равно возможен просто в том же потоке.
При запуске IDE вылетает в астрал. Не вижу никаких преимуществ (с) :)

Насчет одного потока - сдается мне, IDE тупо не умеет цепляться к нескольким потокам, потому принудительно крутит код в одном.
И потому еще раз: пусть эти товарищи-реаниматоры положат крупный прибор на собственную IDE.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971209
mihlon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyБаян, велосипедист опоздал на 4 года.

Здесь автор сделал многопоточность, не рушащую IDE: http://bbs.vbstreets.ru/viewtopic.php?f=54&t=43507

А учитывая то, что многопоточность можно сделать вообще без костылей (в ActiveX exe), ценность библиотеки ТСа стремится к нулю.

Так получается, что в обсуждаемой статье готовой вариант DLL / bas не был представлен?
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971217
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mihlonAntonariyБаян, велосипедист опоздал на 4 года.

Здесь автор сделал многопоточность, не рушащую IDE: http://bbs.vbstreets.ru/viewtopic.php?f=54&t=43507

А учитывая то, что многопоточность можно сделать вообще без костылей (в ActiveX exe), ценность библиотеки ТСа стремится к нулю.

Так получается, что в обсуждаемой статье готовой вариант DLL / bas не был представлен?Получается да, я выдал желаемое за действительное.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971231
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЭээ... общие и разделяемые это одно и тоже или нет?
Это одно и тоже. Данные общие но некоторые требуют атомарного доступа, а некоторые нет.
автор"Глобальные" предполагаются быть в основном потоке, их нужно запрашивать через объектную модель. Вместо Sleep втыкаешь Set mHost = GetObject(, "Cliserv.Host") и юзаешь интерфейс Host.
А ты знаешь что тут имеет место быть маршаллинг и если основной поток будет что-то делать и необрабатывать оконные сообщения, или будет делать запрос другому клиенту то запрашивающий поток будет простаивать и ждать. Также будут копироваться данные. Например если мне нужно иметь общий массив то я вынужден его буду копировать туда сюда юзая интерфейсные Property Get/Let.
авторЭто админские-то права - затруднения?
Да. Ты знаешь надежный способ обхода этих ограничений?
авторROT тоже работает лишь под админом, но есть какой-то иной способ, который используется офисом. Офис в ROT не лезет, однако GetObject работает. Но, я не выяснял, что это за способ.
Ты можешь придумать сам какой хочешь способ, просто ROT уже есть, но ты можешь сам создать такую таблицу вручную.
авторПри запуске IDE вылетает в астрал. Не вижу никаких преимуществ (с) :)
Эта версия старая (которая используется во фрактале), используй либо DLL что в первом посте, либо используй модуль на который я выложил ссылку в первом посте.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971241
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2А ты знаешь что тут имеет место быть маршаллинг и если основной поток будет что-то делать и необрабатывать оконные сообщенияА он не должен делать ничего такого, чтобы даже оконная процедура не обрабатывалась. Зависший интерфейс это ахтунг. В моем представлении поток должен быстро забрать, что ему нужно, выполнить свою работу, быстро вернуть результат и самоубиться.

ATM-TURBO 2Да. Ты знаешь надежный способ обхода этих ограничений?Да. Залогиниться под админом, установить, разлогиниться. Не вижу в этом проблемы.

ATM-TURBO 2Например если мне нужно иметь общий массив то я вынужден его буду копировать туда сюда юзая интерфейсные Property Get/Let.Или не копировать, модифицируя его через те же пропертя.
Или получить указатель и гадить прямо в память :) Но тут скорее всего я как раз и наткнусь на ошибки совместного доступа, придется это разруливать.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971281
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А он не должен делать ничего такого, чтобы даже оконная процедура не обрабатывалась.
Он может делать все что угодно,. он может обрабатывать в этот момент событие от другого потока или нескольких потоков.
Да. Залогиниться под админом, установить, разлогиниться. Не вижу в этом проблемы.
Ну залогинится под админом это и есть проблема. К тому же, как ты написал что для регистрации в ROT нужны права. Получается что права нужны всегда, а не только на момент установки.
Или не копировать, модифицируя его через те же пропертя.
Ага и для того чтобы скопировать один элемент массива нужно будет делать маршалинг через границу апартамента (тормозить поток, транспортировать параметры, ждать ответа). Это будет катастрофически медленно нежели использовать прямую запись как у меня.
Или получить указатель и гадить прямо в память :)
В любом случае это медленней непосредственного обращения.
Получаются что данные находятся в одном АП, лежат "бок о бок" а для доступа к ним нужно делать столько работы. Заметь, я не говорю лишней , потому что это не так просто VB6 стандартными средствами непозволит работать напрямую с общими данными и все обращения заранее синхронизированы. Получается как-бы аналог работы не в разных потоках, а в разных процессах.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971365
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
Option Explicit

Private Declare Function ArrPtr& Lib "msvbvm60.dll" Alias "VarPtr" (ptr() As Any)
Private Declare Sub RtlMoveMemory Lib "kernel32" (dst As Any, src As Any, ByVal nBytes&)

Private Header1(5) As Long
Private Header2(5) As Long
Private SafeArray1() As Long
Private SafeArray2() As Long


Private Sub Class_Initialize()
    ' Set up our template for looking at strings
    Header1(0) = 1              ' Number of dimensions
    Header1(1) = 4              ' Bytes per element (long = 4)
    Header1(4) = &H7FFFFFFF     ' Array size
  
    ' Force SafeArray1 to use Header1 as its own header
    RtlMoveMemory ByVal ArrPtr(SafeArray1), VarPtr(Header1(0)), 4
    
    ' Set up our template for look at search text
    Header2(0) = 1                 ' Number of dimensions
    Header2(1) = 4                 ' Bytes per element (long = 4)
    Header2(4) = &H7FFFFFFF        ' Array size
  
    ' Force SafeArray1 to use Header1 as its own header
    RtlMoveMemory ByVal ArrPtr(SafeArray2), VarPtr(Header2(0)), 4
End Sub


Private Sub Class_Terminate()
    ' Make SafeArray1 once again use its own header
    ' If this code doesn't run the IDE will crash
    RtlMoveMemory ByVal ArrPtr(SafeArray1), 0&, 4
    RtlMoveMemory ByVal ArrPtr(SafeArray2), 0&, 4
End Sub


Friend Function IsSameText03(String1 As String, String2 As String, Compare As VbCompareMethod) As Boolean
' By Chris Lucas, cdl1051@earthlink.net, 20011204
    Dim i&, SLen&, tmp1&, tmp2&, tmp3&, tmp4&, alt&
    
    SLen = LenB(String1)
    If SLen <> LenB(String2) Then Exit Function
    
    Header1(3) = StrPtr(String1): Header2(3) = StrPtr(String2)
    
    If Compare = vbTextCompare Then
        For i = 0 To SLen \ 4 - 1
            tmp1 = SafeArray1(i)
            tmp2 = (tmp1 And &HFFFF&)
            tmp3 = SafeArray2(i)
            tmp4 = (tmp3 And &HFFFF&)
            
            
            Select Case tmp2
                Case 97& To 122&: alt = tmp2 - 32
                Case 65& To 90&: alt = tmp2 + 32
                Case 49&: alt = 185
                Case 50&: alt = 178
                Case 51&: alt = 179
                Case 138&: alt = 154
                Case 140&: alt = 156
                Case 142&: alt = 158
                Case 154&: alt = 138
                Case 156&: alt = 140
                Case 158&: alt = 142
                Case 159&: alt = 255
                Case 178&: alt = 50
                Case 179&: alt = 51
                Case 185&: alt = 49
                Case 192& To 214&: alt = tmp2 + 32
                Case 216& To 222&: alt = tmp2 + 32
                Case 224& To 246&: alt = tmp2 - 32
                Case 248& To 254&: alt = tmp2 - 32
                Case 255&: alt = 376
                Case 338&: alt = 339
                Case 339&: alt = 338
                Case 352&: alt = 353
                Case 353&: alt = 352
                Case 376&: alt = 255
                Case 381&: alt = 382
                Case 382&: alt = 381
            End Select
            
            
            If alt <> tmp4 Then
                If tmp2 <> tmp4 Then Exit Function
            End If
            tmp2 = (tmp1 And &HFFFF0000)
            tmp4 = (tmp3 And &HFFFF0000)
            Select Case tmp2
                Case &H610000 To &H7A0000: alt = tmp2 - &H200000
                Case &H410000 To &H5A0000: alt = tmp2 + &H200000
                Case &H310000: alt = &HB90000
                Case &H320000: alt = &HB20000
                Case &H330000: alt = &HB30000
                Case &H8A0000: alt = &H9A0000
                Case &H8C0000: alt = &H9C0000
                Case &H8E0000: alt = &H9E0000
                Case &H9B0000: alt = &H8A0000
                Case &H9C0000: alt = &H8C0000
                Case &H9E0000: alt = &H8E0000
                Case &H9F0000: alt = &HFF0000
                Case &HB20000: alt = &H320000
                Case &HB30000: alt = &H970000
                Case &HB90000: alt = &H310000
                Case &HC00000 To &HD60000: alt = tmp2 + &H200000
                Case &HD80000 To &HDE0000: alt = tmp2 + &H200000
                Case &HE00000 To &HF60000: alt = tmp2 - &H200000
                Case &HF80000 To &HFE0000: alt = tmp2 - &H200000
                Case &HFF0000: alt = &H1780000
                Case &H1520000: alt = &H1530000
                Case &H1530000: alt = &H1520000
                Case &H1600000: alt = &H1610000
                Case &H1610000: alt = &H1600000
                Case &H1780000: alt = &HFF0000
                Case &H17D0000: alt = &H17E0000
                Case &H17E0000: alt = &H17D0000
            End Select
            If alt <> tmp4 Then
                If tmp2 <> tmp4 Then Exit Function
            End If
        Next i
        
        If (LenB(String1) \ 2 And 1) Then
            tmp2 = (SafeArray1(i) And &HFFFF&)
            tmp4 = (SafeArray2(i) And &HFFFF&)
            
            Select Case tmp2
                Case 97& To 122&: alt = tmp2 - 32
                Case 65& To 90&: alt = tmp2 + 32
                Case 49&: alt = 185
                Case 50&: alt = 178
                Case 51&: alt = 179
                Case 138&: alt = 154
                Case 140&: alt = 156
                Case 142&: alt = 158
                Case 154&: alt = 138
                Case 156&: alt = 140
                Case 158&: alt = 142
                Case 159&: alt = 255
                Case 178&: alt = 50
                Case 179&: alt = 51
                Case 185&: alt = 49
                Case 192& To 214&: alt = tmp2 + 32
                Case 216& To 222&: alt = tmp2 + 32
                Case 224& To 246&: alt = tmp2 - 32
                Case 248& To 254&: alt = tmp2 - 32
                Case 255&: alt = 376
                Case 338&: alt = 339
                Case 339&: alt = 338
                Case 352&: alt = 353
                Case 353&: alt = 352
                Case 376&: alt = 255
                Case 381&: alt = 382
                Case 382&: alt = 381
            End Select
            
            If tmp2 <> tmp4 Then
                If alt <> tmp4 Then Exit Function
            End If
        End If
    
        IsSameText03 = True
    Else
        For i = 0 To SLen \ 4 - 1
            If SafeArray1(i) <> SafeArray2(i) Then Exit Function
        Next i
    
        If (LenB(String1) \ 2 And 1) Then
            If (SafeArray1(i) And &HFFFF&) <> (SafeArray2(i) And &HFFFF&) Then Exit Function
        End If

        IsSameText03 = True
    End If
End Function


Friend Function IsSameString02(String1 As String, String2 As String) As Boolean
' By Chris Lucas, cdl1051@earthlink.net, 20020607
    
    Dim i&, Len1&, Len2&, tmp&
    
    ' Grab the string lengths
    Len1 = LenB(String1) \ 2: Len2 = LenB(String2) \ 2
    
    ' Make an informed decision as to whether we should continue
    If Len1 <> Len2 Then GoTo BailOut
    
    ' Compare the strings
    Header1(3) = StrPtr(String1): Header2(3) = StrPtr(String2)
    tmp = Len1 \ 2
    ' The first two characters come cheap
    If SafeArray1(i) <> SafeArray2(i) Then GoTo BailOut Else i = i + 1
   
DoLoop:
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If SafeArray1(i) <> SafeArray2(i) Then GoTo NotEqual Else i = i + 1
        If i <= tmp Then GoTo DoLoop
    
NotEqual:
    ' some characters don't match, but we need to check to
    ' see if it happened after the end of the string, a
    ' nasty side-effect of cascading ifs
    If i > tmp Then IsSameString02 = True
    
BailOut:
    ' Lengths don't match, let's do absolutely nothing
End Function

быстрее StrComp от десятков до тысяч(!) раз в зависимости от параметров: http://xbeat.net/vbspeed/c_IsSameText.htm
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971366
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднял тут давно забытое обсуждение этого способа, там более детально расписывали минусы. Видимо, по большому счету ты таки прав, твой кирпич лучше.
Был бы он у меня, когда была нужна многопоточность, рекламировал бы его.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38971402
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторК тому же я написал, что есть и другие способы, админских прав не требующие.
Ну так и не привел реализацию. Возможно что реализация этого метода займет дополнительно несколько кСтрочек кода.
авторА мужики-то не знают и пишут инсталляторы под админов.
Ну да, получается что для простой утилитки, которая к примеру работает с интернетом нужно делать целый инсталлятор. На многих системах получить админские права достаточно проблематично поэтому сейчас очень актуальны всякие обходы UAC и т.п.
авторБудет. Значит не надо так делать в случаях, критических с точки зрения производительности.
А как надо тогда?
авторЭто и есть непосредственное обращение. А с помощью CopyMemory еще более непосредственое. Непосредственней только rtlMoveMemory.
x = ObjPtr(obj) - > Set obj = ObjFromPtr(x) и у тебя ссылка на тот же самый объект, что в основном потоке, хотя для объектов этот финт ушами не нужен. Примерно такая же фигня с массивом: VarPtr(arr(0)) - указатель на начало массива, обратную операцию не помню, но суть та же.
Во первых ты не можешь использовать ссылку на объект в другом потоке без маршаллинга, потому что это может привести к краху.
Во вторых если данные расположены в произвольном порядке, то тебе для работы с ними придется попотеть. Но это все равно в разы мендленней чем непосредственно написать A = B, да, да и не CopyMemory, ни GetMem не ускорят процесс. Ты конечно можешь замапить массив, но это уже усложнение программы и также медленней непосредственного обращения. Если твой код использует рантайм и код в другом потоке использует рантайм то ты не получишь замедления за счет доступа, так что рантайм тут не причем. КОгда я пишу что-то типа: pubVar = locVar + locVar2 то тут рантайм вообще не юзается. Также если захотеть то можно вообще отказаться от рантайма и не использовать его вплоть до исключения его из импорта.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977077
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyVB6 в коме, его IDE убога, а электрошок к нему пусть применяют те, кому это интересно. Мне нет, я здесь просто делюсь багажом уже ненужных мне знаний.Вчера был в Библио-Глобусе. Не видном месте стояла книга "Visual Basic 6", переизданная в 2014 (!) году. На верхней полке тоже что-то стояло по VB6, я поленился ради них тащить стремянку....
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977184
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyVB6 в коме, его IDE убога, а электрошок к нему пусть применяют те, кому это интересно. Мне нет, я здесь просто делюсь багажом уже ненужных мне знаний.Вчера был в Библио-Глобусе. Не видном месте стояла книга "Visual Basic 6", переизданная в 2014 (!) году. На верхней полке тоже что-то стояло по VB6, я поленился ради них тащить стремянку....
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977374
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно, я скажу банальность, но если книгу кто-то переиздает, значит книгу кто-то покупает....
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977388
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да VB6 такой же яп как и другие, просто не поддерживается больше мелкософтом. На VB6 можно написать любую программу (ну кроме 64-битных, но если применить смекалку то думаю можно и такую написать). В сети есть куча библиотек для него и аддин-ов. Сейчас я разрабатываю адд-ин для расширенной компиляции. Я думаю если получится то можно вообще много каких вещей делать что раньше было невозможно, к примеру инлайн асм-вставки, замена рантаймовских функций своими, создание секций в файле и многое другое.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977402
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProВчера был в Библио-Глобусе. Не видном месте стояла книга "Visual Basic 6", переизданная в 2014 (!) году. На верхней полке тоже что-то стояло по VB6, я поленился ради них тащить стремянку....

Переиздание старой скорее всего. К сожалению, что-то типа пикрелейтеда не переиздадут. А ведь книга офигенная по-своей глубине, именно по-внтуренностям VB6. Недавно подарил ее одному программеру.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977406
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltНедавно подарил ее одному программеру.Ну вот, а я ведь так просил!
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977409
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProEoltНедавно подарил ее одному программеру.Ну вот, а я ведь так просил!

Ну так я тему создавал чтобы отдать книжки, никто с этого форума не пожелал встретиться и забрать их.
Пришлось отдать другому человеку.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38977412
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2Сейчас я разрабатываю адд-ин для расширенной компиляции. Я думаю если получится то можно вообще много каких вещей делать что раньше было невозможно, к примеру инлайн асм-вставки, замена рантаймовских функций своими, создание секций в файле и многое другое.

Я вот жду твой аддон, круто если можно будет добавлять в VB-проект внешние .lib и чтобы вызывать функции можно было не через секцию эскорта экзешника.
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38985823
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2...
VB6 единственный в своем роде, он COM (ActiveX)-ориентированный и других таких нет и не будет...

ну если не будет так об чем речь?

там еще кто то про нативность кричал а мужики в курсе что дот нет натив появился?
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38985893
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
капитанская дочкатам еще кто то про нативность кричал а мужики в курсе что дот нет натив появился?

если ты про это , то не появился
...
Рейтинг: 0 / 0
Многопоточность на VB6.
    #38986002
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eoltкапитанская дочкатам еще кто то про нативность кричал а мужики в курсе что дот нет натив появился?

если ты про это , то не появился

ага с той лишь разницей что появился
а когда говоришь нативный новый вб вылупится? ну ну
...
Рейтинг: 0 / 0
25 сообщений из 73, страница 2 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Многопоточность на VB6.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]