Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21

Передача параметров в поток

13.09.2022, 20:00. Показов 4528. Ответов 31

Студворк — интернет-сервис помощи студентам
Создаю объект класса thread, выдает ошибку что нет перегруженной функции std::thread::thread, принимающей 6 аргументов. Функцию со строкой прикрепляю
C++
1
2
3
4
5
6
void rend(s_pole** pole, s_types* types, s_bots* bots, RenderWindow &(win), int* mode) { 
    //..... 
}
 
// а это строка
thread thr1( rend, pole, types, bots, win, mode );
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2022, 20:00
Ответы с готовыми решениями:

Передача параметров метода в поток
Вот такая вот проблема, выдает ошибку при передаче параметров в поток. Совершенно не получается в интернете найти что нибудь, что поможет....

Pthread взывать поток без параметров
void RunClient(){ int iret; const char *message = "Thread Run_Client()"; if (!Running){ try{ _Running = true; ...

Передача функторов в поток
В классе создан вектор указателей на функторы. Я хочу запустить все функторы в отдельных потоках - см. функцию func(). Какой должен...

31
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
14.09.2022, 07:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Иван184848 Посмотреть сообщение
Мы не в то сторону думаем, я сейчас исправлю mode на &mode,
Исправляйте. Давайте сюда исправленный код, демонстрирующий проблему.

Цитата Сообщение от Иван184848 Посмотреть сообщение
но выдавать ошибку ту же будет
Если будет, то это значит, что в соседнем аргументе сидит еще одна аналогичная ошибка.

Цитата Сообщение от Иван184848 Посмотреть сообщение
дело не правильности параметров, а в оформлении
"В оформлении"?

В смысле? Цвет шрифта не тот?
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
14.09.2022, 07:29  [ТС]
В оформлении, в смысле скобок там каких нибудь нет
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
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
#include <iostream>
#include <SFML\Window.hpp>
#include <SFML\System.hpp>
#include <SFML/Graphics.hpp>
#include <fstream>
#include <thread>
#include <cstdlib>
#include <ctime>
 
 
using namespace sf;
using namespace std;
 
struct s_bots {
    int status;
    int coord_x;
    int coord_y;
    int type;
    float input_data[10];
    float output_data[5];
    int energy;
};
 
struct s_types {
    int status;
    float weights1[10][10];
    float weights2[10][10];
    float weights3[10][10];
    int neurons[10][4];
    int r;
    int g;
    int b;
};
 
struct s_stats {
    int total;
    int selected_action[3];
    float error_action[3];
};
 
struct s_pole {
    int number;
    int energy;
};
 
float f(float x, int type);
void rend(s_pole** pole, s_types* types, s_bots* bots, RenderWindow &(win), int* mode);
 
int main() {
    srand(time(NULL));
    int q1 = 0;
    int q3 = 0;
    s_pole** pole = new s_pole* [50];
    while (q1 < 50) {
        pole[q1] = new s_pole[80];
        q1++;
    }
    q1 = 0;
    s_bots* bots = new s_bots[4000];
    s_types* types = new s_types[4000];
    s_stats* stats = new s_stats[4000];
 
    //ИНИЦИАЛИЗАЦИЯ СТРУКТУР ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    int q2 = 0;
    while (q1 < 4000) {
        if (q1 < 50){
            while (q2 < 80) {
                pole[q1][q2].energy = 20;
                pole[q1][q2].number = -1;
                q2++;
            }
            q2 = 0;
        }
        types[q1].r = 0;
        types[q1].g = 0;
        types[q1].b = 0;
        bots[q1].status = 0;
        bots[q1].coord_x = 0;
        bots[q1].coord_y = 0;
        bots[q1].energy = 0;
        bots[q1].type = 0;
        types[q1].status = 0;
        stats[q1].total = 0;
        while (q3 < 10) {
            if (q3 < 5) {
                bots[q1].output_data[q3] = 0;
            }
            if (q3 < 10) {
                bots[q1].input_data[q3] = 0;
            }
            if (q3 < 3) {
                stats[q1].error_action[q3] = 0;
                stats[q1].error_action[q3] = 0;
            }
            while (q2 < 10) {
                types[q1].weights1[q3][q2] = 0;
                types[q1].weights2[q3][q2] = 0;
                types[q1].weights3[q3][q2] = 0;
                q2++;
                if (q3 < 4) {
                    types[q1].neurons[q2][q3] = 0;
                }
            }
            q2 = 0;
            q3++;
        }
        q3 = 0;
        q1++;
    }
 
 
    q1 = 0;
    setlocale(LC_ALL, "rus");
    //--------------------------------------------------------------------------------
 
    //--------------------------------------------------------------------------------
    Font font;
    font.loadFromFile("./sansation.ttf");
 
    int mouse_x, mouse_y, menu_action, mode;
    float ybot, xbot;
    menu_action = 0;
    Event ev = {};
    RenderWindow win(VideoMode(500, 290), "Start Menu");
 
    RectangleShape start_button;
    start_button.setFillColor(Color(100, 120, 100));
    RectangleShape load_button;
    load_button.setFillColor(Color(100, 120, 100));
 
    Text start_text("NEW START", font, 40);
    Text load_text("LOAD", font, 40);
    Text warning_load_text("No more then 5!", font, 20);
    warning_load_text.setPosition({ 500,5 });
 
    //ЦИКЛ НАЧАЛЬНОГО МЕНЮ  ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    while (win.isOpen()) {
        while (win.pollEvent(ev)) {
            if (ev.type == Event::MouseMoved) {
                mouse_x = ev.mouseMove.x;
                mouse_y = ev.mouseMove.y;
                if ((mouse_x < 401) and (mouse_x > 99) and (mouse_y < 120) and (mouse_y > 50)) {
                    start_button.setFillColor(Color(100, 160, 100));
                }
                else if ((mouse_x < 401) and (mouse_x > 99) and (mouse_y < 240) and (mouse_y > 170)) {
                    load_button.setFillColor(Color(100, 160, 100));
                }
                else {
                    start_button.setFillColor(Color(100, 120, 100));
                    load_button.setFillColor(Color(100, 120, 100));
                }
            }
            else if (ev.type == Event::MouseButtonPressed) {
                if ((mouse_x < 401) and (mouse_x > 99) and (mouse_y < 120) and (mouse_y > 50)) {
                    menu_action = 1;
                }
                else if ((mouse_x < 401) and (mouse_x > 99) and (mouse_y < 240) and (mouse_y > 170)) {
                    menu_action = 2;
                }
            }
            else if (ev.type == Event::Closed) {
                win.close();
            }
            else if (menu_action > 0) {
                win.close();
            }
        }
        win.clear();
 
        start_button.setSize({ 300,70 });
        start_button.setPosition({ 100, 50 });
        start_text.setPosition({ 140,59 });
        win.draw(start_button);
        win.draw(start_text);
 
 
        load_button.setSize({ 300,70 });
        load_button.setPosition({ 100, 170 });
        load_text.setPosition({ 193,179 });
        win.draw(load_button);
        win.draw(load_text);
 
        win.display();
    }
    ev = {};
    q1 = 0;
    q2 = 0;
 
    //Произошел выход из цикла меню =================================================================================================
 
    if (menu_action == 1) {
        RenderWindow win(VideoMode(1920, 1050), "Simulation");
        //Цикл симуляции :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        while (win.isOpen()) {
            thread interface(rend, pole, types, bots, ref(win), &(mode) );
        }
    }
 
 
    if (menu_action == 2) {
        ifstream worlds;
        worlds.open("worlds.txt");
        char names_worlds[6][100];
 
        q1 = 1;
        while (q1 < 6) {
            worlds.getline(names_worlds[q1], 99);
            q1++;
        }
        q1 = 0;
        worlds.getline(names_worlds[0], 99);
        RectangleShape menu_load_button1;
        RectangleShape menu_load_button2;
        RectangleShape menu_load_button3;
        RectangleShape menu_load_button4;
        RectangleShape menu_load_button5;
        RenderWindow win(VideoMode(700, 1020), "Load");
        //Цикл загрузки :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        while (win.isOpen()) {
            while (win.pollEvent(ev)) {
                if (ev.type == Event::MouseMoved) {
                    mouse_y = ev.mouseMove.y;
                    mouse_x = ev.mouseMove.x;
                    if ((mouse_y < 210) and (mouse_y > 40)) {
                        menu_load_button1.setFillColor(Color(100, 100, 100));
                        menu_load_button2.setFillColor(Color(50, 50, 50));
                        menu_load_button3.setFillColor(Color(50, 50, 50));
                        menu_load_button4.setFillColor(Color(50, 50, 50));
                        menu_load_button5.setFillColor(Color(50, 50, 50));
                    }
                    else if ((mouse_y < 410) and (mouse_y > 240)) {
                        menu_load_button2.setFillColor(Color(100, 100, 100));
                        menu_load_button1.setFillColor(Color(50, 50, 50));
                        menu_load_button3.setFillColor(Color(50, 50, 50));
                        menu_load_button4.setFillColor(Color(50, 50, 50));
                        menu_load_button5.setFillColor(Color(50, 50, 50));
                    }
                    else if ((mouse_y < 610) and (mouse_y > 440)) {
                        menu_load_button3.setFillColor(Color(100, 100, 100));
                        menu_load_button1.setFillColor(Color(50, 50, 50));
                        menu_load_button2.setFillColor(Color(50, 50, 50));
                        menu_load_button4.setFillColor(Color(50, 50, 50));
                        menu_load_button5.setFillColor(Color(50, 50, 50));
                    }
                    else if ((mouse_y < 810) and (mouse_y > 640)) {
                        menu_load_button4.setFillColor(Color(100, 100, 100));
                        menu_load_button1.setFillColor(Color(50, 50, 50));
                        menu_load_button2.setFillColor(Color(50, 50, 50));
                        menu_load_button3.setFillColor(Color(50, 50, 50));
                        menu_load_button5.setFillColor(Color(50, 50, 50));
                    }
                    else if ((mouse_y < 1010) and (mouse_y > 840)) {
                        menu_load_button5.setFillColor(Color(100, 100, 100));
                        menu_load_button1.setFillColor(Color(50, 50, 50));
                        menu_load_button2.setFillColor(Color(50, 50, 50));
                        menu_load_button3.setFillColor(Color(50, 50, 50));
                        menu_load_button4.setFillColor(Color(50, 50, 50));
                    }
                    else {
                        menu_load_button1.setFillColor(Color(50, 50, 50));
                        menu_load_button2.setFillColor(Color(50, 50, 50));
                        menu_load_button3.setFillColor(Color(50, 50, 50));
                        menu_load_button4.setFillColor(Color(50, 50, 50));
                        menu_load_button5.setFillColor(Color(50, 50, 50));
                    }
                }
                else if (ev.type == Event::MouseButtonPressed) {
                        q1 = 0;
                        if ((mouse_y < 210) and (mouse_y > 40)) {
                            win.close();
                            ifstream world;
                            world.open("world1.txt");
 
                            world.close();
                        }
                        else if ((mouse_y < 410) and (mouse_y > 240)) {
                            win.close();
                            ifstream world;
                            world.open("world2.txt");
 
                            world.close();
                        }
                        else if ((mouse_y < 610) and (mouse_y > 440)) {
                            win.close();
                            ifstream world;
                            world.open("world3.txt");
 
                            world.close();
                        }
                        else if ((mouse_y < 810) and (mouse_y > 640)) {
                            win.close();
                            ifstream world;
                            world.open("world4.txt");
 
                            world.close();
                        }
                        else if ((mouse_y < 1010) and (mouse_y > 840)) {
                            win.close();
                            ifstream world;
                            world.open("world5.txt");
 
                            world.close();
                        }
                }
                else if (ev.type == Event::Closed) {
                    win.close();
                }
            }
                win.clear();
                win.draw(warning_load_text);
                menu_load_button1.setPosition({ 0, 40 });
                menu_load_button1.setSize({ 700,170 });
                win.draw(menu_load_button1);
                win.draw(warning_load_text);
                menu_load_button2.setPosition({ 0, 240 });
                menu_load_button2.setSize({ 700,170 });
                win.draw(menu_load_button2);
                win.draw(warning_load_text);
                menu_load_button3.setPosition({ 0, 440 });
                menu_load_button3.setSize({ 700,170 });
                win.draw(menu_load_button3);
                win.draw(warning_load_text);
                menu_load_button4.setPosition({ 0, 640 });
                menu_load_button4.setSize({ 700,170 });
                win.draw(menu_load_button4);
                win.draw(warning_load_text);
                menu_load_button5.setPosition({ 0, 840 });
                menu_load_button5.setSize({ 700,170 });
                win.draw(menu_load_button5);
                float q2 = 0;
                while (q1 < 6) {
                    q1++;
                    Text worldname(names_worlds[q1], font, 30);
                    q2 = q1 * 200 - 140;
                    worldname.setPosition({50,q2});
                    win.draw(worldname);
                }
                q1 = 0;
                win.display();
            
        }
        
        worlds.close();
        
    }
    return 0;
}
float f(float x, int type) {
    if (type == 1) {
        if (x < 0.45) {
            return (x - 0.45) * 0.01;
        }
        else if (x > 0.55) {
            return (x + 99.45) * 0.01;
        }
        else {
            return (x - 0.45) * 10;
        }
    }
    else if (type == 2) {
        if (x < 0.38) {
            return (x - 0.38) * 0.01;
        }
        else if (x > 0.62) {
            return -(x - 0.62) * 0.01;
        }
        else if (x > 0.5) {
            return -(x - 0.62) * 10;
        }
        else {
            return (x - 0.38) * 10;
        }
    }
    else if (type == 3) {
        return ((rand() % 2001) - 1000) * 0.001;
    }
}
 
 
void rend(s_pole** pole, s_types* types, s_bots* bots, RenderWindow &(win), int* mode) {
    int q1, q2;
    float ybot, xbot;
    RectangleShape bot;
    Event ev;
    bot.setSize({ 18,18 });
    q1 = 0;
    q2 = 0;
        while (win.pollEvent(ev)) {
            if (ev.type == Event::Closed) {
                win.close();
            }
        }
        win.clear();
        while (q1 < 50) {
            while (q2 < 80) {
                if (pole[q1][q2].number == -1) {
                    ybot = q1 * 20 + 11;
                    xbot = q2 * 20 + 1;
                    bot.setPosition({ xbot,ybot });
                    bot.setFillColor(Color(200, 200, 200));
                    win.draw(bot);
                }
                else {
                    //bots[pole[q1][q2].number].type
                }
                q2++;
            }
            q2 = 0;
            q1++;
        }
        q1 = 0;
        win.display();
    
    
}
Добавлено через 12 минут
ща пытался фотку прикрепить, посмотрим как вышло

Добавлено через 1 минуту
не очень чтото получается скрин прилепить, надеюсь на слово верите что ошибка такая
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
14.09.2022, 07:51
Цитата Сообщение от Иван184848 Посмотреть сообщение
надеюсь на слово верите что ошибка такая
Скачал SFML. Попробовал скомпилировать ваш код в в VS2017. Все прекрасно компилируется. Кое-какие предупреждения лезут, но ошибок нет. (Линковку не делал только.)
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
14.09.2022, 07:52  [ТС]
Что такое линковка
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
14.09.2022, 07:59
Цитата Сообщение от Иван184848 Посмотреть сообщение
Что такое линковка
Линковка = сборка. Требует подключения SFML библиотек.

Раз уж пошло такое дело, подключил библиотеки:

sfml-system.lib
sfml-window.lib
sfml-graphics.lib

Все прекрасно скомпилировалось и слинковалось.

Что я делаю неправильно?
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
14.09.2022, 08:01  [ТС]
Видимо все правильно, раз вы просто скопировали код. Проблема в компиляторе VS 2019 . Домой приду покручу настройки компилятора
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
14.09.2022, 08:47
Лучший ответ Сообщение было отмечено Иван184848 как решение

Решение

Отдельно стоит заметить, что когда вы все таки скомпилируете и запустите свой код, то получите пендюлей во время выполнения вот за это

C++
1
2
3
        while (win.isOpen()) {
            thread interface(rend, pole, types, bots, ref(win), &(mode) );
        }
Вы здесь деструктируете объект std::thread, для которого не было сделано join() или detach(). Это приведет к аварийному завершению программы.
Добавлено через 6 минут
Цитата Сообщение от Иван184848 Посмотреть сообщение
Проблема в компиляторе VS 2019
Да, действительно, наблюдаю такую проблему в VS2019 на том же коде...

А, ну все ясно:

Ваша манера делать using namespace std привела к конфликту имен вашего rend со стандартным std::rend (https://en.cppreference.com/w/cpp/iterator/rend)

Минимальный пример

C++
1
2
3
4
5
6
7
8
9
10
#include <thread>
 
using namespace std;
 
void rend() {} 
 
int main() 
{
  thread t(rend);
}
Какое-то "паразитное" включение заголовка через посредство <thread> привносит в код и std::rend, который конфликтует с вашим rend.

Либо выкосите нафиг using namespace std (что за дикая манера?), либо переименуйте свою rend, либо указывайте ::rend при создании потока

C++
1
thread interface(::rend, pole, types, bots, ref(win), &mode);
---

Что интересно GCC до версии 12 и Clang до версии 15 тоже ругаются на этот код. Но даже в этих поздних версиях, ошибка тоже возникает если, скажем, добавить #include <array>. То есть вопрос лишь в том, попадет ли в код объявление std::rend.
4
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
14.09.2022, 10:06  [ТС]
Ок, думал что проблема в версии MSVC 142. Лучше просто переименую rend в rnd например. Насчет using namespace ...; это моя первая прога на плюсах, во всех гайдах написана эта строка, не знал что это плохо
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,058
14.09.2022, 11:07
Иван184848, зато теперь ты знаешь, как хороший гайд отличить от плохого

а вот это выглядит избыточно -
Цитата Сообщение от Иван184848 Посмотреть сообщение
//ИНИЦИАЛИЗАЦИЯ СТРУКТУР :::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::: ::::::::::
    int q2 = 0;
    while (q1 < 4000) {
        if (q1 < 50){
            while (q2 < 80) {
                pole[q1][q2].energy = 20;
                pole[q1][q2].number = -1;
                q2++;
            }
            q2 = 0;
        }
        types[q1].r = 0;
        types[q1].g = 0;
        types[q1].b = 0;
        bots[q1].status = 0;
        bots[q1].coord_x = 0;
        bots[q1].coord_y = 0;
        bots[q1].energy = 0;
        bots[q1].type = 0;
        types[q1].status = 0;
        stats[q1].total = 0;
        while (q3 < 10) {
            if (q3 < 5) {
                bots[q1].output_data[q3] = 0;
            }
            if (q3 < 10) {
                bots[q1].input_data[q3] = 0;
            }
            if (q3 < 3) {
                stats[q1].error_action[q3] = 0;
                stats[q1].error_action[q3] = 0;
            }
            while (q2 < 10) {
                types[q1].weights1[q3][q2] = 0;
                types[q1].weights2[q3][q2] = 0;
                types[q1].weights3[q3][q2] = 0;
                q2++;
                if (q3 < 4) {
                    types[q1].neurons[q2][q3] = 0;
                }
            }
            q2 = 0;
            q3++;
        }
        q3 = 0;
        q1++;
    }
я бы лучше прописал инициализацию прямо в структуре для соответствующих полей
1
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
14.09.2022, 11:18  [ТС]
вот так?
C++
1
2
3
struct s{
int x[10]={};
float y=0;}
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,058
14.09.2022, 11:23
Иван184848, ага
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
14.09.2022, 17:08
Цитата Сообщение от Иван184848 Посмотреть сообщение
вот так?
Для обнуления достаточно было сделать так при выделении памяти

C++
1
2
3
    s_bots* bots = new s_bots[4000]{};
    s_types* types = new s_types[4000]{};
    s_stats* stats = new s_stats[4000]{};
И все. Сами структуры исправлять не нужно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2022, 17:08
Помогаю со студенческими работами здесь

C++ передача 2 сокетов в поток
Проблема такая. Пишу программу(Крестики нолики), но(в моем случае на 4 клиента - 2 потока, т.е. на 2 клиента 1поток) пытаясь передать 2...

Передача переменных в поток
Вот никак не могу разобраться, как передать переменную в функцию потока. Вот например есть код: DWORD WINAPI Ms(LPVOID pr) { ...

C++ 11 передача ссылки в поток thread
Доброго времени суток, возникла такая ситуация. Использую я QT Creator с компилятором MinGW32 Есть у меня статический метод который я...

Передача копии адреса в поток
Всем привет. Проблема в том что когда запускается поток итератор уже указывает за пределы листа. Как передать копию адреса или владение...

Передача в поток многомерных массивов по указателю
Доброго всем времени суток. У меня возникло непонимание того, как можно передать двумерный (многомерный) массив в поток. Пока это...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru