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

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

13.09.2022, 20:00. Показов 4530. Ответов 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
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
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
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
13.09.2022, 21:39
Цитата Сообщение от Иван184848 Посмотреть сообщение
скопировал вашу строчку и вставил вместо своей, все то же самое

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

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

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

Кстати, почему в вашем вопросе (и до сих пор) не приведены объявления переменных-аргументов, которые вы передаете? Где это все? Как мы должны проверить правльность вашего вызова, не зная типов передаваемых аргументов? Телепатически?
0
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,548
Записей в блоге: 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
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
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
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,548
Записей в блоге: 9
13.09.2022, 22:31
mode объявлена в main как int, а передаётся в параметр типа int*.
Настоящие сообщения компилятора очень секреные, их привести нельзя?
И что это за компилятор, какой версии?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
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
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
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 и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru