Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786

Как правильно создать окно только для сообщений, используя CreateWindowEx?

02.08.2023, 20:37. Показов 3032. Ответов 63
Метки нет (Все метки)

Итак, например мне захотелось использовать окно только для сообщений, и я не знаю с чего мне начать и как это сделать правильно, я ещё новичок. Но я понял, что можно создать окно только для сообщений двумя путями:

1) Сначала зарегистрировать свой собственный класс окна (а это геморно и долго), а потом уже создать окно только для сообщений
2) Использовать любой класс окна, хоть например BUTTON, а потом создать окно только для сообщений
3) Использовать системный класс "Message" при создании окна только для сообщений

И вот я ломаю голову как же поступить правильнее. Сразу скажу, что самое простое это использовать системный класс "Message" но так ли это правильно, а регистрировать свой собственный класс ой как не хочется (ну зачем же столько много лишнего кода!!!)

Посоветуйте, пожалуйста, либо помогите мне, пожалуйста, готовым кодом на VB6 для создания окон только для сообщений. Я ищу самый простой вариант.

Вот моя идея такова, код:

Visual Basic
1
hMsgWindow = CreateWindowEx(0, StrPtr("Message"), 0, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, App.hInstance, ByVal 0&)
Это действительно создаст окно только для сообщений! И ведь всего одна строчка кода! Так не хочется регистрировать класс ещё да и зачем? Кто что толкового скажет по этому поводу!?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2023, 20:37
Ответы с готовыми решениями:

Как правильно активировать окно и переключить фокус клавиатуры на него в чужом потоке с использованием оконных сообщений
Я почитал инструкции которые здесь описаны...

Создать функции для вычисления n! и a^b, используя только только арифметические действия
Создать функцию для вычисления n! и ab, используя только только арифметические действия (+, –, :, ·). Вычислить выражения, используя...

Создать функции для вычисления n! и a^b , используя только только арифметические действия
Создать функции для вычисления n! и a^b ,используя только только арифметические действия (+, –, :, ). Вычислить выражения, используя...

63
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38208 / 21141 / 4311
Регистрация: 12.02.2012
Сообщений: 34,753
Записей в блоге: 14
04.08.2023, 07:54
Цитата Сообщение от HackerVlad Посмотреть сообщение
осталось только разместить здесь код для создания окна для сообщений с регистрацией класса
- или использовать альтернативные механизмы коммуникации
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
04.08.2023, 10:48  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- или использовать альтернативные механизмы коммуникации
спасибо, но это не то, что мне надо. у меня же простая задача - иконка в системном трее, вы наверное даже мой проект не смотрели раз говорите совсем о другом
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38208 / 21141 / 4311
Регистрация: 12.02.2012
Сообщений: 34,753
Записей в блоге: 14
04.08.2023, 12:58
HackerVlad, опять-таки верно. Не смотрел. Исходил из общих соображений.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
04.08.2023, 23:29  [ТС]
The trick, скажи пожалуйста, если я использую конструкцию для ожидания действий вот такую:

Visual Basic
1
2
3
4
    Do
        WaitMessage
        DoEvents
    Loop
А в событии субклассирования то есть в события отлавливания сообщений ловлю нажатия клавиш и по нажатию клавиш что-то там выполняю. В общем такая очередь ожидания (без формы программа) это вполне нормальный код?

Добавлено через 3 минуты
Я думал использовать очередь сообщений через PeekMessage но убедился в том, что очередь не всегда срабатывает для стопроцентного определения сообщений, в момент подвисания программы уже не работает. Но зато работает сабклассинг. После подвисания сообщение приходит в событие сабклассинга, хотя бы для горячих клавиш пока рассматриваю. Поэтому я отказался от PeekMessage покачто.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
04.08.2023, 23:29
Цитата Сообщение от HackerVlad Посмотреть сообщение
В общем такая очередь ожидания (без формы программа) это вполне нормальный код?
Нет. GetMessage/TranslateMessage/DisaptchMessage.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
05.08.2023, 01:17  [ТС]
Единственный плюс очереди сообщений, для использования именно вместо сабклассинга это то что не глючит среда VB6 как в субклассированиях обычно

Добавлено через 59 секунд
А почему тогда вполне работает такой код?

Visual Basic
1
2
3
4
Do
        WaitMessage
        DoEvents
    Loop
Моя единственная задача чтобы программа не завершалась сразу после запуска вот, а ожидала там сообщений каких-то

Добавлено через 20 минут
The trick, ладно хоть мой код работает тоже, всё же я решил по твоей технологии сделать

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Do
        lRet = GetMessage(MsgThreed, 0, 0, 0)
        
        If lRet = -1 Then
            ' // Error
            Exit Do
        ElseIf lRet = 0 Then
            Exit Do
        Else
            TranslateMessage MsgThreed
            DispatchMessage MsgThreed
        End If
    Loop
Такую очередь ожидания, а теперь вопрос, как сделать так чтобы программа выходила из этого цикла очереди ожидания, при выходе из программы?

Добавлено через 4 минуты
The trick, как в эту очередь ещё и PeekMessage добавить тогда

Добавлено через 1 минуту
У меня была вообще другая очередь! Вот такая:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Do
        WaitMessage
        
        If PeekMessage(MsgThreed, 0, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
            If MsgThreed.wParam = 88001 Then
                KillTimer HandleThunderRT6Main, 0
                Unload Form1
                Exit Do ' Выйти из программы
            End If
            If MsgThreed.wParam = 88002 Then
                Form1.Show
                KillTimer HandleThunderRT6Main, 0
            End If
        End If
        
        DoEvents
    Loop
В этой очереди я хотябы знал как выйти из цикла и из программы.

Добавлено через 1 минуту
The trick, а в твоей очереди я просто не знаю как организовать выход, не использовать же варворский End я знаю это очень плохой код...

Добавлено через 6 минут
The trick, вот например так работает!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Do
        lRet = GetMessage(MsgThreed, 0, 0, 0)
                
        If lRet = -1 Then
            ' // Error
            Exit Do
        ElseIf lRet = 0 Then
            Exit Do
        Else
            If MsgThreed.Message = WM_HOTKEY Then Exit Do ' Сообщение по которому выйдем из программы
            
            TranslateMessage MsgThreed
            DispatchMessage MsgThreed
        End If
    Loop
Такая очередь теперь правильная?

Добавлено через 45 секунд
Теперь осталось только придумать своё сообщение для выхода из программы

Добавлено через 8 минут
О! Я придумал гениально простой код, который позволит выйти из программы и из очереди

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Do
        lRet = GetMessage(MsgThreed, 0, 0, 0)
        
        If lRet = -1 Then
            ' // Error
            Exit Do
        ElseIf lRet = 0 Then
            Exit Do
        Else
            If ExitProgram = True Then Exit Do ' Сообщение по которому выйдем из программы
            
            TranslateMessage MsgThreed
            DispatchMessage MsgThreed
        End If
    Loop
Вместо сообщения я решил просто использовать переменную и всё! И не надо посылать никаких пользовательских сообщений как я изначально думал...

А потом просто так:

Visual Basic
1
2
3
Private Sub Form_Unload(Cancel As Integer)
    ExitProgram = True
End Sub
Добавлено через 57 секунд
Сообщения WM_NCDESTROY, WM_UAHDESTROYWINDOW, WM_DESTROY у меня всё равно почему-то не считывались при закрытии окна что странно кстати

Добавлено через 8 минут
Ах вот какая разница! Я тут эксперементально обнаружил, что прокачка сообщений через DoEvents это плохо тем что, если программа подвисает то из очереди уже сообщения потом не дастаются те что были отправлены в момент подвисания программы

Добавлено через 42 секунды
Цитата Сообщение от The trick Посмотреть сообщение
GetMessage/TranslateMessage/DisaptchMessage
Оба варианта работают, но этот твой вариант лучше, убедился на практике что лучше чем DoEvents

Добавлено через 1 минуту
А зачем тогда вообще сабклассинг если все сообщения можно из очереди получать?

Добавлено через 7 минут
Из очереди работают не все сообщения как я вижу) Сообщения WM_MOUSEMOVE из очереди не работают именно для системного трея иконки. Работает это сообщение только из сабклассинга почему-то хз почему...

Добавлено через 21 минуту
Ура! Всё! Я вот такую очередь придумал!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Do While Not ExitProgram
        lRet = GetMessage(MsgThreed, 0, 0, 0)
        
        If lRet = -1 Then ' Error
            Exit Do
        ElseIf lRet = 0 Then
            Exit Do
        Else
            TranslateMessage MsgThreed
            DispatchMessage MsgThreed
        End If
    Loop
Более красиво теперь! Теперь в моменте выхода из программы просто нужно будет написать ExitProgram = True и всё)

Добавлено через 54 секунды
И это без обработки сообщений в очереди, потому что я их всё-таки в сабклассинге решил обрабатывать...

Добавлено через 47 секунд
Теперь думаю The Trick скажет что у меня всё правильно написано)))

Добавлено через 18 минут
Да и если кому интересно, благодаря полученным знаниям сегодня я написал аналог функции Sleep только лучше, которая не замораживает процесс (а это бывает ой как не нужно)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function WaitMessage Lib "user32" () As Long
 
' Ожидать количество миллисекунд (аналог функции Sleep, только не замораживает поток)
Public Sub MyWait(milliseconds As Long)
    Dim GetTick As Long
    
    GetTick = GetTickCount
    
    While GetTickCount < GetTick + milliseconds
        WaitMessage ' Не нагружать процессор на 100% во время ожидания
        DoEvents
    Wend
End Sub
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,663
Записей в блоге: 2
05.08.2023, 16:53
Цитата Сообщение от HackerVlad Посмотреть сообщение
благодаря полученным знаниям сегодня я написал аналог функции Sleep
Почему DoEvents использовал, если
Цитата Сообщение от HackerVlad Посмотреть сообщение
GetMessage/TranslateMessage/DisaptchMessage
**
лучше чем DoEvents
?
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
05.08.2023, 18:52  [ТС]
testuser2, ай там не надо сильно тяжёлого кода, так легче просто

Добавлено через 2 минуты
testuser2, всё равно эта функция лайтовая слишком и не учитывает подвисание процесса, правильно было бы в отдельном потоке делать через CreateThread и 500 разных других API-функций, но оно нам надо разве

Добавлено через 7 минут
SetTimer тогда уже проще)))

Добавлено через 40 секунд
Надо бы посмотреть код самого DoEvents кстати
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
05.08.2023, 21:10
WaitMessage вообще-то ждет сообщения. Если их нет то она и не вернет управление никогда. Для усыпления потока с обработкой сообщений нужно использовать MsgWaitForMultipleObjects.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Такую очередь ожидания, а теперь вопрос, как сделать так чтобы программа выходила из этого цикла очереди ожидания, при выходе из программы?
Вообще правильно как раз отправлять PostQuitMessage, тогда GetMessage вернет FALSE. Но тут есть проблема с отладкой в IDE поскольку в этом случае завершится и IDE. Вариант с внешней переменной в этом случае - нормальный. Можно послать какое-либо сообщение WM_APP + xxx или заюзать RegisterWindowMessage.

Цитата Сообщение от HackerVlad Посмотреть сообщение
А зачем тогда вообще сабклассинг если все сообщения можно из очереди получать?
Я вообще не понимаю для чего тут сабклассинг.
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
06.08.2023, 02:38  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Можно послать какое-либо сообщение WM_APP + xxx или заюзать RegisterWindowMessage
Спасибо большое за правильные подсказки, ты мне всегда очень помогаешь, ты знаешь, что я ещё только учусь. Я ещё не работал с отправкой и приёмом своих пользовательских сообщений, но скоро мне как раз это будет нужно. Я уже фантазировал на эту тему какие же именно сообщения мне отправлять думал что WM_USER + что-то там придумать, хорошо что ты сказал про RegisterWindowMessage...

Добавлено через 2 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Я вообще не понимаю для чего тут сабклассинг
Для работы с иконкой в SysTray из очереди не получается, я пробовал уже
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
06.08.2023, 20:19  [ТС]
Итак, придя к мысли, что регистрировать новый класс обязательно нужно, появляется вопрос как это правильно сделать вообще? Как зарегистрировать свой собственный класс окон? Какие я сразу вижу сложности - это WndProc. Указатель на оконную процедуру.

Я тут не знаю как правильно поступать вообще. Но в программных кодах The Trick'а я нашёл следующий код:

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
' // Create window proc
Private Function CreateWndProcCode() As Long
    Dim ptr                 As Long
    Dim hUser32             As Long
    Dim pfnDefWindowProc    As Long
    
    ptr = HeapAlloc(hCodeHeap, 0, &H1A)
    If ptr = 0 Then Exit Function
    
    hUser32 = GetModuleHandle(StrPtr("user32"))
    pfnDefWindowProc = GetProcAddress(hUser32, "DefWindowProcW") - ptr - &HF
    
    ' //    CMP DWORD [ESP+8], WM_ONCALLBACK
    ' //    JE SHORT L
    ' //    JMP DefWindowProcW
    ' // L: PUSH DWORD PTR SS:[ESP+10]
    ' //    CALL DWORD PTR SS:[ESP+10]
    ' //    RETN 10
 
    GetMem8 439819570.2913@, ByVal ptr
    GetMem8 -7205759402265.6652@, ByVal ptr + 8
    GetMem8 -446281617701647.8604@, ByVal ptr + &H10
    GetMem2 16&, ByVal ptr + &H18
    GetMem4 pfnDefWindowProc, ByVal ptr + &HB
    
    CreateWndProcCode = ptr
    
End Function
Та самая ассемблерная вставка, про которую я уже говорил и которая меня так пугает. Надо ли так вообще делать!?

Добавлено через 1 минуту
Неужели нельзя просто написать AddressOf моя процедура)))

Добавлено через 14 минут
Я не знаю как зарегистрировать свой собственный класс окон! Помогите, пожалуйста! Код The Trick'а кажется очень сложным

Добавлено через 10 минут
Я просто не изучал ещё эту тему (программисту на Vb6 это знать не обязательно) но если каждый класс окон имеет связанную процедуру окна, то тогда зачем мне будет использовать сабклассинг достаточно будет просто указать на свою процедуру и всё? И ловить все сообщения класса получится? (а там всё равно будет только одно моё окно)
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
06.08.2023, 20:24
HackerVlad, ну в MSDN все предельно четко описано. Тут есть тоже примеры. Конечно, указываешь свою оконную процедуру также как и для сабклассинга.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
06.08.2023, 21:20  [ТС]
The trick, я вот сейчас и начал читать документацию MSDN так как это очень сложно создать класс оказывается

Добавлено через 22 секунды
The trick, я и правда могу просто написать AddressOf вместо твоей ассемблерной вставки?????

Добавлено через 2 минуты
The trick, а что такое FAR_PROC?

Добавлено через 23 минуты
я раньше даже и не знал что обязательно существует одна оконная процедура для всего класса, к каждому классу, пока не начал читать доку.

Добавлено через 25 минут
Мне нужен код FAR_PROC

Добавлено через 2 минуты
Нашёл!

Visual Basic
1
2
3
4
Public Function FAR_PROC( _
                ByVal pfn As PTR) As PTR
    FAR_PROC = pfn
End Function
Остался вопрос, что такое PTR

Добавлено через 18 секунд
Где и как он описывается
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
06.08.2023, 21:35
Цитата Сообщение от HackerVlad Посмотреть сообщение
Остался вопрос, что такое PTR
Это алиас, можешь просто Long использовать.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.08.2023, 08:06  [ТС]
Кажется у меня получилось наконец но в оконной процедуре стало выдавать Rine-time error 6 переполнение стека оч странно
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.08.2023, 08:10  [ТС]
Первый раз такое вижу в оконной процедуре... Это происходит сразу при появлении формы Form1.Show почему-то...
Миниатюры
Как правильно создать окно только для сообщений, используя CreateWindowEx?  
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.08.2023, 09:14  [ТС]
Я не понимаю что это значит... Это число какое-то вышло за рамки Long'а?

Добавлено через 6 минут
Вроде за диапозон 2 млрд числа не выходили... Тогда может оконная процедура по другому должна быть описана?

Добавлено через 8 минут
Без DefWindowProc не работает к сожалению вообще ...

Добавлено через 14 минут
А что, обязательно обрабатывать все приходящие сообщения? Причина только в этом?

Добавлено через 29 секунд
Что за ерунда... А если кто-то мне отправит сообщение насильно через SendMessage у меня что программа ляжет из-за этого...

Добавлено через 12 минут
Как только я написал:

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
Private Function ReceiverWndProc( _
                 ByVal hWnd As Long, _
                 ByVal lMsg As Long, _
                 ByVal wParam As Long, _
                 ByVal lParam As Long) As Long
    
    Select Case lMsg
        Case WM_MOUSEMOVE
            If lParam = WM_LBUTTONUP Then
                MsgBox "LeftClick"
            End If
        Case WM_HOTKEY
            If wParam = 88001 Then
                ExitProgram = True
                KillTimer hMsgWindow, 0
                Unload Form1
            End If
            If wParam = 88002 Then
                Form1.Show
                KillTimer hMsgWindow, 0
            End If
        Case Else
            ReceiverWndProc = DefWindowProc(hWnd, lMsg, wParam, lParam) ' err 6
    End Select
End Function
То есть добавил обработку WM_HOTKEY то ошибка исчезла... Я не понимаю немного логики работы этой всей системы. А если мне кто-то отправит сообщение WM какое-нибудь? Тогда что?

Добавлено через 1 минуту
Хорошая новость тут только в том, что оказывается теперь совершенно нет никакой необходимости использовать субклассирование. Обработкой класса окна всё шикарно идёт. И гораздо лучше чем сабклассинг ибо не глючит среда IDE.

Добавлено через 54 секунды
Процедуру класса окна я правильно составил? Хелп! Помогите!?

Добавлено через 2 минуты
Но самое главное здесь это то, что я научился регистрировать свой собственный класс окон, без всяких там ассемблерных вставок) это уже хорошо)))

Добавлено через 4 минуты
Странно это осозновать, но 6 ошибка происходит только в WM_HOTKEY если я дополнительно произведу ReceiverWndProc = DefWindowProc(hWnd, lMsg, wParam, lParam) в других сообщениях кроме WM_HOTKEY этого вроде нету

Добавлено через 1 минуту
Эта странная ошибка номер 6 до сих пор мне не понятна...
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.08.2023, 09:17  [ТС]
Это очень-очень непонятная для меня ошибка, но нашёл способ как с ней бороться))))) только не смейтесь надо мной))) внимание на скриншот)))
Миниатюры
Как правильно создать окно только для сообщений, используя CreateWindowEx?  
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.08.2023, 09:20  [ТС]
Хотя я кстати видел проекты Трика которые без этой галочки вообще не работают
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.08.2023, 09:23  [ТС]
Всё, кажется, я всё сделал, вот проект:
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.08.2023, 09:23

Используя иерархию и наследование, создать классы окно, окно с заголовком и окно с кнопкой
Используя иерархию и наследование, создать классы окно, окно с заголовком и окно с кнопкой. C++

Как создать контрол WinForms через CreateWindowEx?
Необходимо создать контрол WindowsForms через CreateWindowEx(). Spy++ показывает, например,...

CreateWindowEx() не создает окно
Работаю в VS 2013 Express, Юникод в настройках включен, GetLastError возвращает 0, CreateWindowEx возвращает 0. CreateWindowEx всего один,...

Как правильно создать окно MCI?
Как правильно создать окно MCI? Сделал как пишется здесь,но выдает ошибки: Unit1.cpp(21): E2268 Call to undefined function...

Как правильно создать второе окно?
Наверное я плохо искал, но понятного решения не нашел.Создаю вторую форму так же, как и создавал первую Справа в обозревателе с помощью...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[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
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru