Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/20: Рейтинг темы: голосов - 20, средняя оценка - 4.90
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79

А вы задумывались как работает коллекция в VB6?

31.08.2016, 23:36. Показов 6011. Ответов 29
Метки нет (Все метки)

Всем привет.
Решил пореверсить коллекции. Выяснилось что это двоичное дерево, все смещения в классах соответствуют смещениям в оригинальной коллекции (можете заменять на структуры и смело обращаться по указателю, меняя данные). Реализованы не все методы, но для понимания алгоритма работы - это не требуется.
Сама коллекция CVBCollection:
Visual Basic
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
' //
' // Native VB collection
' // Decompiled by The trick
' //
 
Option Explicit
 
Private Const DISP_E_PARAMNOTFOUND        As Long = &H80020004
Private Const CTL_E_ILLEGALFUNCTIONCALL   As Long = &H800A0005
Private Const DISP_E_OVERFLOW             As Long = &H8002000A
Private Const E_OUTOFMEMORY               As Long = &H8007000E
 
Public pInterface1         As IUnknown            ' // 0x00
Public pInterface2         As IUnknown            ' // 0x04
Public pInterface3         As IUnknown            ' // 0x08
Public lRefCounter         As Long                ' // 0x0C
Public lNumOfItems         As Long                ' // 0x10
Public pvUnk1              As Long                ' // 0x14
Public pFirstIndexedItem   As CVBCollectionItem   ' // 0x18
Public pLastIndexedItem    As CVBCollectionItem   ' // 0x1C
Public pvUnk4              As Long                ' // 0x20
Public pFirstItem          As CVBCollectionItem   ' // 0x24
Public pRootItem           As CVBCollectionItem   ' // 0x28
Public pvUnk5              As Long                ' // 0x2C
 
' // Get item
Public Property Get Item( _
                    ByRef vKeyIndex As Variant) As Variant
    Dim hr      As Long
    Dim pItem   As CVBCollectionItem
    
    hr = GetItemByKey(vKeyIndex, pItem)
    
    If hr < 0 Then
        Err.Raise hr
        Exit Property
    End If
    
    If IsObject(pItem.vtItem) Then
        Set Item = pItem.vtItem
    Else
        Item = pItem.vtItem
    End If
    
End Property
 
' // Add item to collection
Public Sub Add( _
           ByRef vItem As Variant, _
           Optional ByRef vKey As Variant, _
           Optional ByRef vBefore As Variant, _
           Optional ByRef vAfter As Variant)
    Dim bIsEmptyKey     As Boolean
    Dim bIsEmptyBefore  As Boolean
    Dim bIsEmptyAfter   As Boolean
    Dim vIndex          As Variant
    Dim pNewItem        As CVBCollectionItem
    Dim pItem           As CVBCollectionItem
    Dim pTempItem       As CVBCollectionItem
    Dim bstrKey         As String
    Dim hr              As Long
    
    bIsEmptyKey = IsMissingParam(vKey)
    bIsEmptyBefore = IsMissingParam(vBefore)
    bIsEmptyAfter = IsMissingParam(vAfter)
    
    If bIsEmptyBefore Then
        If Not bIsEmptyAfter Then
            vIndex = vAfter
        End If
    Else
        If Not bIsEmptyAfter Then
            Err.Raise CTL_E_ILLEGALFUNCTIONCALL
            Exit Sub
        End If
        vIndex = vBefore
    End If
    
    If lNumOfItems < 0 Then
        Err.Raise DISP_E_OVERFLOW
        Exit Sub
    End If
    
    If bIsEmptyKey Then
        Set pNewItem = New CVBCollectionItem
    Else
        
        hr = GetItemByKey(vKey, pNewItem)
        If hr >= 0 Then
            Err.Raise &H800A01C9
            Exit Sub
        End If
        
        ' // 48
        Set pNewItem = New CVBCollectionItem
        
        bstrKey = BSTRKeyFromVariant(vKey)
        
        If Len(bstrKey) = 0 Then
            Err.Raise &H800A000D
            Exit Sub
        End If
        
        pNewItem.bstrKey = bstrKey
        pNewItem.bFlag = False
        
        Set pNewItem.pRight = pRootItem
        Set pNewItem.pLeft = pRootItem
        
    End If
    
    ' // VariantCopyInd
    pNewItem.vtItem = vItem
   
    If IsEmpty(vIndex) Then
        Set pItem = pLastIndexedItem
    Else
    
        hr = GetItemByKey(vIndex, pItem)
        If hr < 0 Then
            Err.Raise hr
            Exit Sub
        End If
        
        If Not bIsEmptyBefore Then
            Set pItem = pItem.pPrevIndexedItem
        End If
        
    End If
    
    If Not bIsEmptyBefore And pItem Is Nothing Then
    
        Dim pTmpItem As CVBCollectionItem
        
        Set pTmpItem = pFirstIndexedItem
        Set pFirstIndexedItem = pNewItem
        Set pTmpItem.pPrevIndexedItem = pNewItem
        Set pNewItem.pPrevIndexedItem = Nothing
        Set pNewItem.pNextIndexedItem = pTmpItem
        
    Else
    
        If Not pItem Is Nothing Then
        
            Set pNewItem.pNextIndexedItem = pItem.pNextIndexedItem
            
            If Not pItem.pNextIndexedItem Is Nothing Then
                Set pNewItem.pNextIndexedItem.pPrevIndexedItem = pNewItem
            Else
                Set pLastIndexedItem = pNewItem
            End If
            
            Set pItem.pNextIndexedItem = pNewItem
            
        Else
        
            Set pNewItem.pNextIndexedItem = Nothing
            Set pFirstIndexedItem = pNewItem
            Set pLastIndexedItem = pNewItem
          
        End If
        
    End If
    
    Set pNewItem.pPrevIndexedItem = pItem
 
    If Not bIsEmptyKey Then
        AddItemWithKeyToTree pNewItem
    End If
    
    lNumOfItems = lNumOfItems + 1
    
End Sub
 
' // Get item by variant key/index
Private Function GetItemByKey( _
                 ByRef vKey As Variant, _
                 ByRef pOutItem As CVBCollectionItem) As Long
    Dim bIsEmptyKey As Boolean
    Dim bstrKey     As String
    Dim lIndex      As Long
    Dim pItem       As CVBCollectionItem
    
    bIsEmptyKey = IsMissingParam(vKey)
 
    If bIsEmptyKey Or pFirstIndexedItem Is Nothing Then
        GetItemByKey = CTL_E_ILLEGALFUNCTIONCALL
        Exit Function
    End If
    
    bstrKey = BSTRKeyFromVariant(vKey)
    
    ' // This is string key
    If Len(bstrKey) Then
        
        Set pOutItem = FindItemFrom(pFirstItem, bstrKey)
        
        If pOutItem Is pRootItem Then
            GetItemByKey = CTL_E_ILLEGALFUNCTIONCALL
            Exit Function
        End If
        
    Else
    
        lIndex = Int(vKey)
        
        If lIndex <= 0 Or lIndex > lNumOfItems Then
            GetItemByKey = &H800A000D
            Exit Function
        End If
 
        Set pOutItem = pFirstIndexedItem
 
        Do Until lIndex = 1
            Set pOutItem = pOutItem.pNextIndexedItem
            lIndex = lIndex - 1
        Loop
        
    End If
    
End Function
 
' // Add item that has a key to tree
Private Function AddItemWithKeyToTree( _
                 ByVal pItem As CVBCollectionItem) As Long
    Dim pCurItem            As CVBCollectionItem
    Dim pParentItem         As CVBCollectionItem
    Dim pParentParentItem   As CVBCollectionItem
    Dim pParentLeft         As CVBCollectionItem
 
    ' // Insert item to tree
    InsertItemToTree pItem
    
    pItem.bFlag = False
    
    Set pCurItem = pItem
    
    Do Until pCurItem Is pFirstItem
    
        Set pParentItem = pCurItem.pParentItem
        
        If pParentItem.bFlag Then Exit Do
        
        Set pParentParentItem = pParentItem.pParentItem
        Set pParentLeft = pParentParentItem.pLeft
        
        If pParentItem Is pParentLeft Then
            
            Set pParentLeft = pParentParentItem.pRight
            
            If Not pParentLeft.bFlag Then
            
                pParentItem.bFlag = True
                pParentLeft.bFlag = True
                pParentItem.pParentItem.bFlag = False
                Set pCurItem = pCurItem.pParentItem.pParentItem
                
            Else
            
                If pCurItem Is pParentItem.pParentItem Then
                
                    Set pCurItem = pCurItem.pParentItem
                    MoveDownRight pParentItem
                    
                Else
                
                    pParentItem.bFlag = True
                    pParentItem.pParentItem.bFlag = False
                    MoveDownLeft pCurItem.pParentItem.pParentItem
                
                End If
                
            End If
            
        Else
            
            If pParentLeft.bFlag Then
            
                If pCurItem Is pParentItem.pLeft Then
                
                    Set pCurItem = pCurItem.pParentItem
                    MoveDownLeft pParentItem
                
                Else
                    
                    pParentItem.bFlag = True
                    pParentItem.pParentItem.bFlag = False
                    MoveDownRight pCurItem.pParentItem.pParentItem
                    
                End If
                
            Else
            
                pParentItem.bFlag = True
                pParentLeft.bFlag = True
                pParentItem.pParentItem.bFlag = False
                Set pCurItem = pCurItem.pParentItem.pParentItem
                
            End If
 
        End If
    
    Loop
    
    pFirstItem.bFlag = True
    
End Function
 
' // Move tree item down and left
Private Sub MoveDownLeft( _
            ByVal pItem As CVBCollectionItem)
    Dim pParentLeft   As CVBCollectionItem
    
    Set pParentLeft = pItem.pLeft
    Set pItem.pLeft = pParentLeft.pRight
    
    If Not pParentLeft.pRight Is pRootItem Then
        Set pParentLeft.pRight.pParentItem = pItem
    End If
    
    Set pParentLeft.pParentItem = pItem.pParentItem
    
    If pItem.pParentItem Is pRootItem Then
        Set pFirstItem = pParentLeft
    Else
        If pItem Is pItem.pParentItem.pRight Then
            Set pItem.pParentItem.pRight = pParentLeft
        Else
            Set pItem.pParentItem.pLeft = pParentLeft
        End If
    End If
    
    Set pParentLeft.pRight = pItem
    Set pItem.pParentItem = pParentLeft
    
End Sub
 
' // Move tree item down and right
Private Sub MoveDownRight( _
            ByVal pItem As CVBCollectionItem)
    Dim pRight  As CVBCollectionItem
    
    Set pRight = pItem.pRight
    Set pItem.pRight = pRight.pLeft
    
    If Not pRight.pLeft Is pRootItem Then
        Set pRight.pLeft.pParentItem = pItem
    End If
    
    Set pRight.pParentItem = pItem.pParentItem
    
    If pItem.pParentItem Is pRootItem Then
        Set pFirstItem = pRight
    Else
        If pItem Is pItem.pParentItem.pLeft Then
            Set pItem.pParentItem.pLeft = pRight
        Else
            Set pItem.pParentItem.pRight = pRight
        End If
    End If
    
    Set pRight.pLeft = pItem
    Set pItem.pParentItem = pRight
    
End Sub
 
' // Insert item to tree
Private Function InsertItemToTree( _
                 ByVal pItem As CVBCollectionItem) As Long
    Dim pCurItem    As CVBCollectionItem
    Dim pParentItem As CVBCollectionItem
    Dim hr          As Long
    
    Set pParentItem = pRootItem
    Set pCurItem = pFirstItem
    
    ' // Check if item exists
    If Not pParentItem Is pCurItem Then
        
        ' // Find tree node for passed item
        Do
        
            Set pParentItem = pCurItem
            
            hr = StrComp(pItem.bstrKey, pCurItem.bstrKey, vbTextCompare) + 1
            
            Select Case hr
            Case 0
                Set pCurItem = pCurItem.pLeft
            Case 1
                ' // Error. Specified item already exists
                InsertItemToTree = &H800A01C9
                Exit Function
            Case 2
                Set pCurItem = pCurItem.pRight
            End Select
            
        Loop Until pCurItem Is pRootItem
        
    Else:   hr = ObjPtr(pItem)
    End If
    
    ' // Set parent node for passed item
    Set pItem.pParentItem = pParentItem
    
    ' // Check if it is the root node
    If pParentItem Is pRootItem Then
        Set pFirstItem = pItem
    Else
        ' // Place item depending on value
        If hr Then
            Set pParentItem.pRight = pItem
        Else
            Set pParentItem.pLeft = pItem
        End If
    End If
    
End Function
                 
' // Find an item by key from specified item
Private Function FindItemFrom( _
                 ByVal pStartItem As CVBCollectionItem, _
                 ByRef bstrKey As String) As CVBCollectionItem
    Dim pCurItem    As CVBCollectionItem
    
    Set pCurItem = pStartItem
    
    Do Until pCurItem Is pRootItem
    
        Select Case StrComp(bstrKey, pCurItem.bstrKey, vbTextCompare)
        Case -1:    Set pCurItem = pCurItem.pLeft
        Case 0:     Exit Do
        Case 1:     Set pCurItem = pCurItem.pRight
        End Select
        
    Loop
    
    Set FindItemFrom = pCurItem
    
End Function
 
' // Convert a variant value to string
Private Function BSTRKeyFromVariant( _
                 ByRef vKey As Variant) As String
    Dim vTemp   As Variant
    Dim pTmpObj As Object
    
    If IsObject(vKey) Then
    
        Set pTmpObj = vKey
        
        If Not pTmpObj Is Nothing Then
            vTemp = CStr(vKey)
        Else
            Set vTemp = vKey
        End If
    
    Else
        vTemp = vKey
    End If
     
    If VarType(vTemp) = vbString Then
        BSTRKeyFromVariant = CStr(vTemp)
    End If
    
End Function
 
Private Function IsMissingParam( _
                 ByRef vParam As Variant) As Boolean
                 
#If COMPILED Then
    
    If IsError(vParam) Then
        If CInt(vParam) = DISP_E_PARAMNOTFOUND Then
            IsMissingParam = True
        End If
    End If
    
#Else
 
    IsMissingParam = IsMissing(vParam)
    
#End If
 
End Function
 
Private Sub Class_Initialize()
 
    Set pRootItem = New CVBCollectionItem
    Set pFirstItem = pRootItem
    
#If Not COMPILED Then
    
    pRootItem.bstrKey = "root"
    
#End If
 
End Sub
Элемент коллекции CVBCollectionItem:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
' //
' // Native VB collection item
' // Decompiled by The trick
' //
 
Option Explicit
 
Public vtItem              As Variant
Public bstrKey             As String
Public pPrevIndexedItem    As CVBCollectionItem
Public pNextIndexedItem    As CVBCollectionItem
Public pvUnknown           As Long
Public pParentItem         As CVBCollectionItem
Public pRight              As CVBCollectionItem
Public pLeft               As CVBCollectionItem
Public bFlag               As Boolean
5
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.08.2016, 23:36
Ответы с готовыми решениями:

Как это работает? Хотелось бы реализовать на VB6
http://potrebitel.biz/angel/mk.htm

Объясните как работает коллекция ObservableCollection
Здравствуйте, есть код. public class Class { public int Name { get { return 1; } } public int...

Linq to xml - не работает, коллекция все время пустая
Не могу понять, что не правильно: XElement xdoc = XElement.Load(&quot;http://www.onliner.by/feed&quot;); IEnumerable&lt;XElement&gt;...

29
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,663
Записей в блоге: 2
29.04.2024, 16:27
В общем как-то все сложно, буду лучше экспериментировать с HeapWalk
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
22.02.2025, 20:58
Цитата Сообщение от The trick Посмотреть сообщение
А вы задумывались как работает коллекция в VB6?
А тут есть код который сортирует ключи в коллекции? Я что-то не могу понять.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
22.02.2025, 21:44  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
А тут есть код который сортирует ключи в коллекции? Я что-то не могу понять.
Они и так сортированные.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
22.02.2025, 21:54
The trick, ну у тебя же вроде как исходный код самой коллекции? а какой код отвечает за самосортировку?
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,663
Записей в блоге: 2
23.02.2025, 05:27
Цитата Сообщение от The trick Посмотреть сообщение
Они и так сортированные.
В смысле что дерево само какбы сортированое, но чтобы полный сортированый список ключей получить, наверно надо хитро как-то пройтись по дереву?

Добавлено через 9 минут
HackerVlad, вот еще по теме коллекции Как получить название ключа в коллекции
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
23.02.2025, 21:29  [ТС]
HackerVlad, ты почитай что такое двоичное дерево, там элементы хранятся сортированными.
Цитата Сообщение от testuser2 Посмотреть сообщение
В смысле что дерево само какбы сортированое, но чтобы полный сортированый список ключей получить, наверно надо хитро как-то пройтись по дереву?
Да, как по любому двоичному дереву. Доходим до самого левого листа и дальше к родителю, потом правые ветки смотрим и так пока все дерево не обойдем.
2
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,663
Записей в блоге: 2
25.02.2025, 07:43
Сделал визуализацию красно-черного дерева в Экселе. Построение начинается с ячейки "E2", если сделать другую ширину столбца "E" то она отразится на всех элементах дерева. Чтобы отображались пустые ноды, нужно константе ShowEmptyNodes присвоить True.
Миниатюры
А вы задумывались как работает коллекция в VB6?  
Вложения
Тип файла: zip CollectionVisual.xlsm.zip (31.0 Кб, 3 просмотров)
2
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,663
Записей в блоге: 2
25.02.2025, 08:11
На картинке не правильное дерево, надо было вместо 1, 6, 8 писать 01, 06, 08, тогда будет пр-льно
1
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,663
Записей в блоге: 2
25.02.2025, 14:54
Цитата Сообщение от The trick Посмотреть сообщение
Public bFlag As Boolean
Наверное этот флажек отвечает за "красноту" добавил его в структуру, и сделал раскраску по нему. 16 и 20 не красные.. с разбегу, конечно это не поймешь )
Миниатюры
А вы задумывались как работает коллекция в VB6?  
2
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,663
Записей в блоге: 2
25.02.2025, 16:43
Вот с правильным вариантом раскраски
Вложения
Тип файла: zip CollectionVisual.xlsm.zip (39.7 Кб, 2 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2025, 16:43

В VB6 не работает SELECT
Изучаю VB6 по книге. Дошел до работы с БД. При попытке присвоить RecordSource какой-либо SQL запрос (SELECT и т.д.), VB пишет типа...

Скрипт ASP в VB6 не работает
Есть работающий ASP, меняет цвет фона: &lt;%@ Language=VBScript %&gt; &lt;html&gt; &lt;body&gt; &lt;h1&gt;&lt;font face='Arial'&gt; Page...

[vb6] не работает form1.print
Здравствуйте. Помогите с совсем нубским вопросом: в VB6 среди методов формы(Form1) нет printа. Поэтому при попытке вызвать form1.print...

Почему не работает VB6 на Win2000
Здравствуйте, юзята. С Новым годом-то! Подскажите: я сделал программку и инсталляционный пакет на VB6. У меня дома и на работе...

VB6 не работает с расширением jpeg
Здравствуйте, уважаемые программисты. Помогите, пожалуйста, с программой. Вот кусочек кода: Private Sub Load() Image_skl.Picture =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Свет в конце тоннеля
kumehtar 16.06.2026
Поймал себя на одной мысли. Раньше мне всегда казалось неправильным жить без чёткого понимания, куда всё идёт. Будто я иду по дороге судьбы, но не знаю, куда она ведёт. А раз не знаю — значит,. . .
[golang] Реализация стека с поддержкой получения минимального элемента за O(1)
alhaos 16.06.2026
155. Min Stack Задача: Реализовать стек который поддерживает push, pop, top и получение минимального элемента за O(1). Методы: NewMinStack() *MinStack — инициализация Push(val int) —. . .
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru