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

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

13.09.2022, 20:00. Показов 4311. Ответов 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
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
13.09.2022, 20:10
Иван184848, у вас 5 параметров в объявлении)
void rend(s_pole** pole, s_types* types, s_bots* bots, RenderWindow &(win), int* mode)
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
13.09.2022, 20:12  [ТС]
объекты thread вроде бы так и создаются (сначала имя функции, а потом через запятую ее параметры)
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
13.09.2022, 20:16
а может быть там нужно параметры в {} заключить?
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
13.09.2022, 20:18  [ТС]
Пробовал уже, пишет что нет перегруженной функции, принимающей 2 параметра, и еще ошибка добавляется: отсутствуют экземпляры конструктора thread, соответствующие списку аргументов
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
13.09.2022, 20:21
такс... ну там есть конструктор с двумя параметрами: Function и Args... попробуйте запихнуть аргументы в класс Args, а функцию в Function
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
13.09.2022, 20:23  [ТС]
а как это реализовать?
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
13.09.2022, 20:30
может через std::ref передавать параметры?

Добавлено через 23 секунды
https://radioprog.ru/post/1403
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
13.09.2022, 20:38  [ТС]
если сделать через ссылку передачу аргументов в функцию, там еще полезут ошибки в самой функции, которые мне лень фиксить, ну а если серьезно все равно это не похоже на решение т.к все равно будет 6 аргументов, 5 из которых вида ref(arg)

Добавлено через 3 минуты
я поместил все аргументы в ref() все равно тоже самое
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
13.09.2022, 20:43
такс, ну тогда нужно ждать более опытных товарищей с форума и гуглить вское разное(
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
13.09.2022, 21:24
Цитата Сообщение от Иван184848 Посмотреть сообщение
оздаю объект класса thread, выдает ошибку что нет перегруженной функции std::thread::thread, принимающей 6 аргументов.
Ну так у вас в функции потока есть параметр типа "неконстантная ссылка": RenderWindow &(win). (Зачем тут лишние скобки, кстати?)

Если вы собраетесь использовать параметры типа "ссылка" в функциях потока, то тогда помните, что передачу аргументов для таких параметров следует делать с помощью std::ref/std::cref

C++
1
thread thr1( rend, pole, types, bots, std::ref(win), mode );
Цитата Сообщение от Иван184848 Посмотреть сообщение
я поместил все аргументы в ref() все равно тоже самое
1. Все-то зачем???
2. Вы что-то выдумываете.
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
13.09.2022, 21:27  [ТС]
скопировал вашу строчку и вставил вместо своей, все то же самое

Добавлено через 33 секунды
нет функции принимающей 6 аргументов
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
13.09.2022, 21:39
Цитата Сообщение от Иван184848 Посмотреть сообщение
скопировал вашу строчку и вставил вместо своей, все то же самое

Попробовал на искусственном примере

http://coliru.stacked-crooked.... 5d39315105

Все прекрасно компилируется. А вот что вы там еще не договориваете - откуда ж нам знать. Телепатов нет.

Кстати, почему в вашем вопросе (и до сих пор) не приведены объявления переменных-аргументов, которые вы передаете? Где это все? Как мы должны проверить правльность вашего вызова, не зная типов передаваемых аргументов? Телепатически?
0
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,517
Записей в блоге: 9
13.09.2022, 21:54
Цитата Сообщение от Иван184848 Посмотреть сообщение
объект класса thread, выдает ошибку что нет перегруженной функции std::thread::thread, принимающей 6 аргументов
Прямо так по Русски и пишет?
Ваш компилятор поддерживает С++11 ?
Функция rend одна с таким именем? Она не член класса? Нет сообщений о неопределённой функции rend ?
Попробуйте минимизировать код который вызывает проблему, вроде
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
#include <iostream>
#include <thread>
 
using namespace std;
 
struct s_pole {};
struct s_types {};
struct s_bots {};
struct RenderWindow {};
 
void rend(s_pole** pole, s_types* types, s_bots* bots, RenderWindow &(win), int* mode) { 
    //..... 
}
 
int main()
{
    s_pole**  pole;
    s_types* types;
    s_bots*  bots;
    RenderWindow win;
    int* mode;
    
    thread thr1( rend, pole, types, bots, ref(win), mode );
    thr1.join();
 
    cout<< "ok";
 
    return 0;
}
Можно попробовать
C++
1
2
3
    thread thr1( static_cast<
        void(*)(s_pole**, s_types*, s_bots*, RenderWindow&, int*)>
            (rend), pole, types, bots, ref(win), mode );
Если и не вылечит, то может указать на проблему.
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
13.09.2022, 21:58  [ТС]
Извиняюсь, что не указал. Думал и так понятно что все это структуры. Вот только RenderWindow это метод библиотеки Sfml. (или структура, не очень разбираюсь), а остальные структуры - динамические массивы структур. Но во всяком случае функция без thread работает абсолютно исправно. Завтра попробую минимизировать код, чтобы понять где ошибка
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
13.09.2022, 21:59
Цитата Сообщение от Иван184848 Посмотреть сообщение
Думал и так понятно что все это структуры.
Это прекрасно, но, скажем, забытый оператор & при передаче какого-то аргумента (скажем, mode) тоже приведет к такому эффекту. Какой тип у аргумента mode?
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
13.09.2022, 22:23  [ТС]
Ща побольше кода прикреплю
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
#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() {
        int mode;
    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];
//потом
thread interface(rend, pole, types, bots, ref(win), mode );
}
Добавлено через 3 минуты
обьявление win еще забыл: RenderWindow win(VideoMode(1920,1050), "Window");
0
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,517
Записей в блоге: 9
13.09.2022, 22:31
mode объявлена в main как int, а передаётся в параметр типа int*.
Настоящие сообщения компилятора очень секреные, их привести нельзя?
И что это за компилятор, какой версии?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
13.09.2022, 22:35
Цитата Сообщение от Иван184848 Посмотреть сообщение
Ща побольше кода прикреплю
Так а что ж вы нам голову морочите какими-то "потоками"? Как я и угадал "телепатически", последний параметр вашей функции потока имет тип int *, а вы туда передаете аргумент типа int.

Почему вы передаете int туда, где ожидается int *? И к потокам это все не имет никакого отношения.
0
0 / 0 / 0
Регистрация: 13.09.2022
Сообщений: 21
14.09.2022, 06:58  [ТС]
Мы не в то сторону думаем, я сейчас исправлю mode на &mode, но выдавать ошибку ту же будет, дело не правильности параметров, а в оформлении судя по ошибке.

Добавлено через 2 минуты
Компилятор Vs 2019 Community. Ща скрины кину
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2022, 06:58
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru