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

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

Восстановить пароль Регистрация
 
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
10.04.2014, 21:32     Pthread взывать поток без параметров #1
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);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 21:50     Pthread взывать поток без параметров #2
Судя по всему функция Run_Client должна быть static.
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
10.04.2014, 22:08  [ТС]     Pthread взывать поток без параметров #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
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 22:14     Pthread взывать поток без параметров #4
Цитата Сообщение от diplomat1129 Посмотреть сообщение
Мне нужно вызвать функцию без параметров в потоке
У функции pthread_create() есть совершенно конкретные параметры вызова. И параметр, отвечающий за рабочую функцию имеет вполне определенную сигнатуру, т.е. должен получать функцию, которая возвращает void* и получает один аргумент void*. Если ничего передавать внутрь не надо, просто объявите ее так:
C++
1
static void *Run_Client(void*)
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
10.04.2014, 22:17  [ТС]     Pthread взывать поток без параметров #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*);
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 22:24     Pthread взывать поток без параметров #6
Ну при вызове-то надо не void* писать, а хотя бы 0 или NULL.
Yandex
Объявления
10.04.2014, 22:24     Pthread взывать поток без параметров
Ответ Создать тему
Опции темы

Текущее время: 04:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru