2017-01-12 8 views
0

Я пытаюсь использовать зЬй :: нить в C++ без успеха:станда :: нить в C++ косяк ошибки при настройке функции нити

A.h 

class A 
{ 
    public: 
     A(); 
     void MainThread(); 
     Init(); 

    private: 
     std::thread currThread; 
} 

A.cpp 

A::A() 
{ 

} 


void A::Init() 
{ 
    currThread = std::thread(A::MainThread); 
    //currThread = std::thread(&MainThread); 
} 

void A::MainThread() 
{ 
    while (true) 
    { 
     std::cout << "Just For Example..."); 
    } 
} 

я получаю ошибку компиляции в функции инициализации при попытке создайте поток с помощью MainFunction

Что я делаю неправильно и как его исправить?

+0

Передайте это как аргумент. –

+0

Ознакомьтесь с указателями функций-членов и т. Д., См. Http://stackoverflow.com/questions/10673585/start-thread-with-member-function. Также вы уверены, что вам нужна функция aseperate Init, а не просто построить поток в списке инициализаторов конструктора? И должен ли MainThread быть публичным? – stijn

ответ

0

Поскольку метод MainThread() не статичен, она будет существовать много раз для различных объектов, так что вы должны указать, что вы имеете в виду метода, который принадлежит this объекту (объект, который вы звоните Init() на).

Есть много тревожных вещей о вашем коде (синтаксическая ошибка, бесконечный цикл и т. Д.). Ваш примерный код (с исправлением) должен выглядеть примерно так:

// A.hpp 
#ifndef A_HPP 
#define A_HPP 

#include <thread> 

class A 
{ 
    public: 
     void Init(); 
     void MainThread(); 

    private: 
     std::thread currThread; 
}; 

#endif // A_HPP 

// A.cpp 
#include <iostream> 
#include <thread> 
#include "A.h" 

void A::Init() 
{ 
    this->currThread = std::thread(&A::MainThread, this); 
} 

void A::MainThread() 
{ 
    //this loop will run forever 
    while (true) 
    { 
     std::cout << "Just For Example..."; 
    } 
} 
+0

он все еще не работает. компилятор не любит строку кода: "this-> currThread = std :: thread (& A :: MainThread);" Я получаю ошибку: error: class "std :: result_of ()>" не имеет члена "типа" –

+0

Попробуйте это-> currThread = std: : thread (& A :: MainThread, this); – alhadhrami