Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82

Как воспроизвести звуковой файл

10.03.2025, 08:57. Показов 13412. Ответов 151
Метки нет (Все метки)

Добрый день, форумчане! Мне очень нравится следующая страница форума Воспроизведение звука
Хотелось бы реализовать коды, представленные на данной странице, но несколько дней пытаюсь и ничего не получается, вы не могли бы помочь в этом вопросе. Условие задачи, необходимо воспроизвести звуковой файл короткого содержания при нажатии кнопки button1, button2-временно остановить (пауза) и button3 просто остановить. Звуковые файлы (они представлены в формате и mp3 и wav подготовлены и хранятся в папке проекта в папке Files). Длина звучания звукового файла предполагается звучать 2, 3 секунды, но можно и больше. Открывать файл не обязательно, предполагается только в коде указать путь к нему…Помогите, кто может...Хотелось бы правильный рабочий код...
Вложения
Тип файла: rar zwuk.rar (1.04 Мб, 46 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2025, 08:57
Ответы с готовыми решениями:

Воспроизвести звуковой файл при щелчке по кнопке
Не подскажите как можно сделать так, чтобы если нажал на кнопку button воспроизводил звуковой файл?

Как мне воспроизвести звуковой сигнал при получении сообщений через SignalR?
Пишу чат на .NET Core и SignalR Core. Мне нужно воспроизводить звуковые сигналы действий (отправка сообщений, получение сообщений). Как я...

Как воспроизвести файл *.xm
Гуглил так не чего толково и не нашел (( Добавлено через 3 часа 25 минут Можно помощи не ждать я так понел :(

151
3260 / 3325 / 556
Регистрация: 17.02.2019
Сообщений: 5,223
19.03.2025, 23:30
kukushka3, наверно понял в чём ошибка, завтра посмотрим.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,723
Записей в блоге: 3
19.03.2025, 23:54
Цитата Сообщение от kukushka3 Посмотреть сообщение
звук в эфире будет иметь большую пробивную способность
Чего? Ты как его собрался в эфир передавать - через микрофон что ли?
Эти программы больше похожи на тренажер, тренировать восприятие азбуки морзе на слух. Для этого и производится генерация тонов с выводом на системные динамики.
У настоящих эфирных трансмиттеров есть собственные авто-генераторы для модуляции морзе-тона. Им необходима лишь последовательность символов, которую следует отправить в эфир.

Цитата Сообщение от kukushka3 Посмотреть сообщение
резковатое звучание генератора
Ну еще бы. Ведь тон 1kHz начинается резко и заканчивается так же, от сюда характерный "щелчок" в колонках. Для нивелирования этого эффекта необходимо использовать супрессоры. Либо логарифмический регулятор уровня. Все эти штуки есть в NAudio, про который я говорил еще вот здесь. Один из вариантов на этой библиотеке реализовал roach1967.
А здесь я переделал твой проект для синтеза тонов без всего вообще, в т.ч. без дебильного WM плеера.

kukushka3, ты ж вроде и про QSL карточки обмена говорил, я тут было подумал - во, человек разбирается и интересуется... А тут, получается, опростоволосился на такой ерунде... В первый раз что ли за радио-обмен взялся?
0
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
20.03.2025, 07:55  [ТС]
Да, нет не первый...Хорошо, поработаю с NAudio....

Добавлено через 7 минут
January29, принёс архив на работу, всё работает, а вот что делать дома не знаю...Дома студию переустановил, результата нет...

В инете по вопросу Разрушительный сбой пишут:

Разрушительный сбой — это ошибка с кодом 0x8000FFFF, которая может возникать на компьютере во время обновления Windows, установки приложений из магазина или при восстановлении системы. 1

Некоторые причины появления ошибки:

повреждение системных файлов и компонентов; 1
нарушение работы системных служб; 1
влияние вредоносного ПО или вирусов. 1
Зачастую синий экран или уведомление с таким кодом ошибки возникает после обновления Windows 10 и попытки установить приложение из Microsoft Store. 2

Но синего экрана у меня не было, просто выпадает окно предупреждающее и всё ???
0
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
20.03.2025, 19:12  [ТС]
wizard4, January29, добрый вечер!
Произвёл сканирование системы:
Microsoft Windows [Version 10.0.19045.5608]
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

C:\WINDOWS\system32>SFC/SCANNOW
Начато сканирование системы. Этот процесс может занять некоторое время.
Начало стадии проверки при сканировании системы.
Проверка 100% завершена.
Программа защиты ресурсов Windows обнаружила поврежденные файлы, но не
может восстановить некоторые из них.
Подробные сведения см. в файле CBS.Log, который находится по следующему пути:
windir\Logs\CBS\CBS.log. Например, C:\Windows\Logs\CBS\CBS.log. Подробные сведения
включены в файл журнала, предоставляемый флагом /OFFLOGFILE.
Может есть какие то соображения, я ноль...
Проблема возникла скорее всего 18.03.2025, не исключаю 19.03.2025...Время бежит быстро, подзабывается...
Вложения
Тип файла: rar Logs.rar (1.13 Мб, 9 просмотров)
0
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
21.03.2025, 17:24
Ради спортивного интереса провёл проверку вариантов генерации звуков. Если генерировать тона точек/тире по отдельности, то между вызовами происходит неконтролируемая пауза. На малой скорости это не так заметно.
Варианты, которые пробовал: с помощью NAudio - задержка между вызовами Play(). Воспроизведение файлов из каталога - приличная задержка (~50 мс). Воспроизведение звуков WAV из ресурсов - уже заметно меньше. Воспроизведение с помощью Console.Beep(frequency, duration) - так-же присутствует задержка.
Воспроизведение сгенерированных в memorystream файлов WAV по отдельным сигнала тонов, опять-же присутствует задержка. (точно таким-же способом, как у wizard41 в post17549426)
Решил применить метод генерации полного WAV фала на всю длину строки вместе с паузами тишины.
Кликните здесь для просмотра всего текста
Немножко отредактировал файлик wizard41 MorseCode.cs, заодно ввёл плавную атаку/спад для мягкости звучания :
DotDash.cs
C#
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
using System;
using System.Collections.Generic;
using System.IO;
using System.Media;
using System.Text;
 
namespace NewMorse
{
    class DotDash
    {
        public int WPM { get; set; } // скорость слов в минуту
        public int Frequency { get; set; } // частота тона
        public int Amplitude { get; set; } // амплитуда тона
 
        private readonly Dictionary<char, string> CodeTable;
        private SoundPlayer sndpl;
 
        private readonly int fading = 100; // размер затухания на краях тонов
 
        public DotDash()
        {
            WPM = 15;
            Frequency = 880;
            Amplitude = 500;
 
            CodeTable = new Dictionary<char, string>
            {
                { 'A', ".-" },
                { 'B', "-..." },
                { 'C', "-.-." },
                { 'D', "-.." },
                { 'E', "." },
                { 'F', "..-." },
                { 'G', "--." },
                { 'H', "...." },
                { 'I', ".." },
                { 'J', ".---" },
                { 'K', "-.-" },
                { 'L', ".-.." },
                { 'M', "--" },
                { 'N', "-." },
                { 'O', "---" },
                { 'P', ".--." },
                { 'Q', "--.-" },
                { 'R', ".-." },
                { 'S', "..." },
                { 'T', "-" },
                { 'U', "..-" },
                { 'V', "...-" },
                { 'W', ".--" },
                { 'X', "-..-" },
                { 'Y', "-.--" },
                { 'Z', "--.." },
 
                { '1', ".----" },
                { '2', "..---" },
                { '3', "...--" },
                { '4', "....-" },
                { '5', "....." },
                { '6', "-...." },
                { '7', "--..." },
                { '8', "---.." },
                { '9', "----." },
                { '0', "-----" },
 
                { '.', ".-.-.-" },
                { ',', "--..--" },
                { '?', "..--.." },
                { '\'', ".----." },
                { '!', "-.-.--" },
                { '/', "-..-." },
                { '{', "-.--." },
                { '}', "-.--.-" },
                { '&', ".-..." },
                { ':', "---..." },
                { ';', "-.-.-." },
                { '=', "-...-" },
                { '+', ".-.-." },
                { '-', "-....-" },
                { '_', "..--.-" },
                { '"', ".-..-." },
                { '$', "...-..-" },
                { '@', ".--.-." }
            };
        }
 
        public void PlayString(string val)
        {
            int period = 1200 / WPM; // считаем длину точки в миллисекундах
            string ctm = ConvertToMorse(val); // получили код морзе
            double ampl = (Amplitude * 32768.0 / 1000) - 1;
            double deltaFT = 2 * Math.PI * Frequency / 22050.0;
 
            int sampleDot = 2205 * period / 100; // длина точки
            int pauseDot = 2205 * period / 100; // пауза между тонами
            int sampleDash = 2205 * 3 * period / 100; // длина тире
            int pauseDash = 2205 * 3 * period / 100 - pauseDot; // пауза между буквами
            int pauseQuiet = 2205 * 7 * period / 100 - pauseDot; // пауза между словами
 
            short[] sndDot = new short[sampleDot];
            short[] sndDash = new short[sampleDash];
 
            // генерируем тона с мягкими атаками/спадами
            for (int i = 0; i < sampleDot; i++)
            {
                if (i < fading)
                {
                    double camp = ampl * i / fading;
                    sndDot[i] = (short)(camp * Math.Sin(deltaFT * i));
                }
                else if (i > sampleDot - fading)
                {
                    double camp = ampl * (sampleDot - i) / fading;
                    sndDot[i] = (short)(camp * Math.Sin(deltaFT * i));
                }
                else
                {
                    sndDot[i] = (short)(ampl * Math.Sin(deltaFT * i));
                }
            }
 
            for (int i = 0; i < sampleDash; i++)
            {
                if (i < fading)
                {
                    double camp = ampl * i / fading;
                    sndDash[i] = (short)(camp * Math.Sin(deltaFT * i));
                }
                else if (i > sampleDash - fading)
                {
                    double camp = ampl * (sampleDash - i) / fading;
                    sndDash[i] = (short)(camp * Math.Sin(deltaFT * i));
                }
                else
                {
                    sndDash[i] = (short)(ampl * Math.Sin(deltaFT * i));
                }
            }
 
            // считаем общее количество семплов
            int totalSamples = 0;
            for (int i = 0; i < ctm.Length; i++)
            {
                switch (ctm[i])
                {
                    case '.':
                        totalSamples += sampleDot;
                        totalSamples += pauseDot;
                        break;
                    case '-':
                        totalSamples += sampleDash;
                        totalSamples += pauseDot;
                        break;
                    case '_':
                        totalSamples += pauseDash;
                        break;
                    case ' ':
                        totalSamples += pauseQuiet;
                        break;
                }
            }
 
            int bytes = totalSamples * 2;
            int[] Hdr = {
                0x46464952, // "RIFF"
                36 + bytes, // Overall file size minus 8 bytes
                0x45564157, // "WAVE"
                0x20746D66, // "fmt "
                16, // Chunk size minus 8 bytes, which is 16 bytes here  (0x10)
                0x0001_0001, // Audio format (1: PCM integer, 3: IEEE 754 float) ++ Number of channels
                22050, // Sample rate (in hertz)
                44100, // Number of bytes to read per second (Frequency * BytePerBloc)
                0x0010_0002, // Number of bytes per block (NbrChannels * BitsPerSample / 8) ++ Number of bits per sample
                0x61746164, // "data"
                bytes // SampledData size
            };
            // пишем в поток
            using (MemoryStream ms = new MemoryStream(44 + bytes))
            using (BinaryWriter bw = new BinaryWriter(ms))
            {
                // сначала заголовок
                for (int i = 0; i < Hdr.Length; i++) bw.Write(Hdr[i]);
                // теперь по символам
                for (int i = 0; i < ctm.Length; i++)
                {
                    if (ctm[i] == '.') // точка
                    {
                        for (int j = 0; j < sampleDot; j++) bw.Write(sndDot[j]);
                        for (int j = 0; j < pauseDot; j++) bw.Write((short)0);
                    }
                    else if (ctm[i] == '-') // тире
                    {
                        for (int j = 0; j < sampleDash; j++) bw.Write(sndDash[j]);
                        for (int j = 0; j < pauseDot; j++) bw.Write((short)0);
                    }
                    else if (ctm[i] == '_') // пауза между букв
                    {
                        for (int j = 0; j < pauseDash; j++) bw.Write((short)0);
                    }
                    else if (ctm[i] == ' ') // пауза между слов
                    {
                        for (int j = 0; j < pauseQuiet; j++) bw.Write((short)0);
                    }
                }
                bw.Flush();
                ms.Seek(0, SeekOrigin.Begin);
 
                using (sndpl = new SoundPlayer(ms))
                {
                    sndpl.Play();
                }
            }
        }
 
        public void Stop()
        {
            if (sndpl != null)
            {
                sndpl.Stop();
            }
        }
 
        private string ConvertToMorse(string value)
        {
            StringBuilder sb = new StringBuilder();
            string ups = value.ToUpper();
            for (int i = 0; i < ups.Length; i++)
            {
                if (ups[i] == ' ')
                {
                    sb.Append(' ');
                }
                else if (CodeTable.ContainsKey(ups[i]))
                {
                    sb.Append(CodeTable[ups[i]]);
                    if (i < ups.Length - 1) sb.Append('_');
                }
            }
            return sb.ToString();
        }
    }
}


Можно менять частоту, громкость, скорость передачи. Но так-как воспроизведение через SoundPlayer, то нет возможности узнать, когда воспроизведение закончилось. Можно только остановить (с помощью backgroundWorker), или перезапустить генерацию+воспроизведение заново.
NewMorse.rar
Есть идея сохранять данные из memorystream во временный файл на диск и воспроизводить через WindowsMediaPlayer. Тогда можно будет узнать текущий прогресс воспроизведения тонального сигнала, поставить на паузу и т.д.
0
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
22.03.2025, 05:37  [ТС]
Доброе утро, roach1967! Вот это совершенно Супер! Этот звук мне очень понравился, мягкий, плавный и нежёсткий и щелчков не слышно, ну это просто сказка, спасибо вам за такой сигнал...Я сейчас переустанавливаю операционную систему, как освобожусь , обязательно подойду, до связи...
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,723
Записей в блоге: 3
23.03.2025, 15:05


Немного причесал последний вариант от roach1967:
- удален повторяющийся код
- удалены лишние обработчики
- удалено излишнее создание временных переменных
- удален BackgroundWorker
- одинаковые расчеты вынесены в функции
- подготовка wav-файла для воспроизведения теперь отдельная таска внутри класса DotDash
- класс DotDash теперь самодостаточный, его можно вынести в отд. библиотеку и использовать в разных проектах.

Цитата Сообщение от roach1967 Посмотреть сообщение
Можно только остановить (с помощью backgroundWorker)
roach1967, остановить воспроизведение можно только методом самого плеера, т.к. он работает сам по себе.
Задача кодирования и воспроизведения, обернутая в BackgroundWorker - бесполезная затея. Фактически, BW только начинает работать и тут же заканчивает. Плеер уже играет в своем потоке и не мешает никому.

BW можно было бы применить, например, если в код Морзе транслировать томик "Война и Мир", а затем его воспроизводить. Но и то под вопросом, т.к. кодирование wav единственная задача, которая здесь выполняется перед плеером.
Вложения
Тип файла: 7z NewMorse.7z (28.0 Кб, 14 просмотров)
1
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
23.03.2025, 16:12  [ТС]
Добрый день, roach1967 и wizard41 ! Я уже думал, что я вас потерял, спасибо работникам сайта за восстановление...У меня просьба как всегда...Сделайте мне пожалуйста на эту форму индикатор звука как у вас см. рис 1. Сам пробовал, для меня сложновато, не получается, помогите, заодно оцените программу, код тоже высылаю......
Миниатюры
Как воспроизвести звуковой файл  
Вложения
Тип файла: rar CW.rar (233.9 Кб, 8 просмотров)
0
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
23.03.2025, 16:23  [ТС]
Добрый день wizard41 и roach1967 ! И вот снова заработал сайт, ура! У меня к вам просьба, посмотрите, пожалуйста этот код программы, он вам знаком...Сделайте. пожалуйста защиту textBoxсов при случае, если в эти ячейки вводятся буквы русского алфавита, а точнее, чтобы в ячейки могли писаться только буквы английского алфавита + знак вопроса и восклицательный знак+_(нижнее подчёркивание) и больше ничего, если конечно это возможно. О себе. переустановил ОС, всё заработало великолепно, я очень рад...Конечно я вас достал со своими заморочками, но мне это тема очень интересна...
Вложения
Тип файла: rar Zwuk_new.rar (1.33 Мб, 4 просмотров)
0
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
23.03.2025, 16:48
wizard41, с радиокнопками вообще шикарное решение (как впрочем и с генерацией семплов точек /тире)!
А с воспроизведением решил переделать кардинально: после заполнения memorystream сохраняю во временный файл и передаю в WindowsMediaPlayer. Он позволяет полностью контролировать воспроизведением - пуск, стоп, пауза. Заодно получаем текущую позицию звучания, которую отображаем на фоне строки с текстом:

NewMorse.rar
Одно но (и к тому же большое) - после работы остаются файлы звука (имена соответствуют содержимому). Можно удалять по завершению программы автоматом
1
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
23.03.2025, 17:11
kukushka3, ограничение по допустимым символам:
C#
1
2
3
4
5
6
7
8
9
10
11
12
string strAllow = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvWxyz?!_";
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (strAllow.Contains(e.KeyChar.ToString()) || e.KeyChar == (char)Keys.Delete || e.KeyChar == (char)Keys.Back)
            {
                return;
            }
            else
            {
                e.Handled = true;
            }
        }
А индикатор уровня звука можно получить, если используется библиотека NAudio. Там есть свойство device.AudioMeterInformation.MasterPeakValue.
0
3260 / 3325 / 556
Регистрация: 17.02.2019
Сообщений: 5,223
23.03.2025, 17:24
Цитата Сообщение от kukushka3 Посмотреть сообщение
чтобы в ячейки могли писаться только буквы английского алфавита + знак вопроса и восклицательный знак+_(нижнее подчёркивание) и больше ничего
Ну чёт таке
Вложения
Тип файла: 7z Zwuk_new.7z (229.8 Кб, 4 просмотров)
0
23.03.2025, 17:25

Не по теме:

а уже ответили

0
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
23.03.2025, 17:25  [ТС]
Ну что же этот вариант тоже пригодится, спасибо...
0
3260 / 3325 / 556
Регистрация: 17.02.2019
Сообщений: 5,223
23.03.2025, 18:01
Цитата Сообщение от kukushka3 Посмотреть сообщение
Ну что же этот вариант тоже пригодится
Попробуйте ещё так
C#
1
2
3
4
5
6
string symbols = $"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvWxyz?!_{(char)Keys.Back}";
 
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
     if (!symbols.Contains(e.KeyChar)) e.Handled = true;
}
1
 Аватар для roach1967
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
23.03.2025, 18:20
January29, Так даже понятней и логичней.
1
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
23.03.2025, 18:37  [ТС]
Ввод букв, знаков ограничил, УРА!!!
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,723
Записей в блоге: 3
23.03.2025, 18:39
Цитата Сообщение от kukushka3 Посмотреть сообщение
на эту форму индикатор звука
Ну это игрушка, тем более на формах.
я обычно делаю вещи посерьезнее
0
3 / 3 / 0
Регистрация: 25.01.2021
Сообщений: 82
23.03.2025, 18:46  [ТС]
Да это конечно очень серьёзно, ну а я начинающий программист-любитель, хоть мне уже 62 года, как быстро бежит время...

Добавлено через 2 минуты
А есть ли у вас проекты такие типа онлайн радио, онлайн чаты и тому подобное???
0
3260 / 3325 / 556
Регистрация: 17.02.2019
Сообщений: 5,223
23.03.2025, 18:46
Цитата Сообщение от kukushka3 Посмотреть сообщение
Ввод букв, знаков ограничил, УРА!!!
Показывайте, очень интересно узнать как делается это.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2025, 18:46

Как воспроизвести mp3 файл
Как воспроизвести mp3 или другой звуковой файл?

Как воспроизвести mp3 файл?
Всем привет! Как воспроизвести mp3 файл?

Как воспроизвести MP3 файл по ссылке?
Здравствуйте! Имеется ссылка на mp3 файл &quot;http://sait.ru/file.mp3&quot;. Нужно сделать, что бы по нажатию на кнопку этот файл...

Как воспроизвести mp3 файл из ресурсов?
У меня в ресурсах проекта есть mp3 и я его хочу воспроизвести. Как же мне это сделать? И чтобы можно было переносить exe-шник из места в...

Как воспроизвести mp3 файл с winmm.dll
Уважаемые посетители уважаемого мною ресурса cyberforum.ru не затруднит ли Вас моя просьба оказать мне помощь? Мне необходимо с помощью...


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

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