Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
#1

Pthread взывать поток без параметров - C++

10.04.2014, 21:32. Просмотров 471. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void RunClient(){
 
        int iret;
        const char *message = "Thread Run_Client()";
 
        if (!Running){
            try{
                _Running = true;
 
                iret = pthread_create(&_ThreadRunClient, NULL, Run_Client);
                pthread_join(_ThreadRunClient, NULL);
 
 
            }catch (exception& e){
                //_Running = false;
                //throw std::invalid_argument(e);
            }
        }
        else{
            //throw std::invalid_argument("Клиент уже остановлен");
        }
    }
Сама функция для потока выглядит так
C++
1
2
3
void* Run_Client(){
            
        }
Ошибка такого вида
NMClient.cpp: In member function ‘void NMClient::RunClient()’:
NMClient.cpp:74:62: error: cannot convert ‘NMClient::Run_Client’ from type ‘void* (NMClient:()’ to type ‘void* (*)(void*)’
iret = pthread_create(&_ThreadRunClient, NULL, Run_Client);
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 21:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Pthread взывать поток без параметров (C++):

Pthread, поток, передающий значение по указателю - C++
Создаётся поток, передающий значение по указателю: pthread_create (&pthread_id1, NULL, my_thread,(void *)arr); pthread_create...

Как узнать, что поток закончился (библиотека pthread)? - C++
Друзья! Есть ли какая-нибудь pthread-функция, которая вызывается в основном потоке X и показывает- да, созданный ранее поток Y закончился? ...

Поток ввода без ошибок - C++
В чем состоит задача: нужно организовать ввод вещественных чисел в массив с помощью cin. И нужно, чтобы при вводе символа не подходящего...

Функция без параметров? - C++
Начал разбираться с библиотекой alglib для решения интеграла сложной функции. В документации нашел такой код, но не могу разобраться с...

Конструкторы с и без параметров - C++
Здравствуйте, Не могу понять где ошибка, на экран выводит мусор, а нужно бы нормальные человеческие числа.. #include <iostream> ...

Конструктор без параметров - C++
class stack { private: int top; // вершина стека int s; // массив в котором хранится стек public: stack (): top(0)...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.04.2014, 21:50 #2
Судя по всему функция Run_Client должна быть static.
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
10.04.2014, 22:08  [ТС] #3
Спасибо. Но появились новые проблемы. Мне нужно вызвать функцию без параметров в потоке
Текущий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void RunClient(){
 
        int iret;
 
        if (!Running){
            try{
                _Running = true;
 
                iret = pthread_create(&_ThreadRunClient, NULL, Run_Client, NULL);
                pthread_join(_ThreadRunClient, NULL);
 
 
            }catch (exception& e){
                _Running = false;
                //throw std::invalid_argument(e);
            }
        }
        else{
            //throw std::invalid_argument("Клиент уже остановлен");
        }
    }
Сама функция
C++
1
2
3
static void *Run_Client(){
            
        }
Ошибка
NMClient.cpp: In member function ‘void NMClient::RunClient()’:
NMClient.cpp:73:68: error: invalid conversion from ‘void* (*)()’ to ‘void* (*)(void*)’ [-fpermissive]
iret = pthread_create(&_ThreadRunClient, NULL, Run_Client, NULL);
^
In file included from /usr/include/x86_64-linux-gnu/c++/4.8/bits/gthr-default.h:35:0,
from /usr/include/x86_64-linux-gnu/c++/4.8/bits/gthr.h:148,
from /usr/include/c++/4.8/ext/atomicity.h:35,
from /usr/include/c++/4.8/bits/basic_string.h:39,
from /usr/include/c++/4.8/string:52,
from NMClient.cpp:2:
/usr/include/pthread.h:232:12: error: initializing argument 3 of ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’ [-fpermissive]
extern int pthread_create (pthread_t *__restrict __newthread,
Если что, вызываемая функция private, функция создающая поток в public
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.04.2014, 22:14 #4
Цитата Сообщение от diplomat1129 Посмотреть сообщение
Мне нужно вызвать функцию без параметров в потоке
У функции pthread_create() есть совершенно конкретные параметры вызова. И параметр, отвечающий за рабочую функцию имеет вполне определенную сигнатуру, т.е. должен получать функцию, которая возвращает void* и получает один аргумент void*. Если ничего передавать внутрь не надо, просто объявите ее так:
C++
1
static void *Run_Client(void*)
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
10.04.2014, 22:17  [ТС] #5
C++
1
static void *Run_Client(void*)
C++
1
iret = pthread_create(&_ThreadRunClient, NULL, Run_Client, void*);
NMClient.cpp: In member function ‘void NMClient::RunClient()’:
NMClient.cpp:73:64: error: expected primary-expression before ‘void’
iret = pthread_create(&_ThreadRunClient, NULL, Run_Client, void*);
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.04.2014, 22:24 #6
Ну при вызове-то надо не void* писать, а хотя бы 0 или NULL.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 22:24
Привет! Вот еще темы с ответами:

Не работает конструктор без параметров - C++
1) Не работает конструктор без параметров. 2) Как должен выглядеть деструктор для классов Server и Client? 3) Как правильно вынести...

Использование функции get() без параметров - C++
Добрый вечер! Помогите, пожалуйста, разобраться с примером. #include <iostream.h> int main () { char ch; while (...

Шестнадцатеричный вывод WORD и DWORD в поток без приведения к указателю - C++
Как сделать? Есть ли для этого потоковый манипулятор? Желательно, чтоб цифры A-F были в верхнем регистре и выводились старшие не значащие...

Изменение параметров конструктора без аргументов - C++
Как в конструкторе без параметров изменить значения из функции main?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.04.2014, 22:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru