静态函数和对类变量的访问

时间:2014-06-26 13:19:33

标签: c++ multithreading static

我有一个包含静态函数MainWindow的类lancerServeur()(此函数是静态的,因为我在一个线程中使用它),现在我想调用一个私有变量{{ 1}}在这个函数中,这里是代码:

bool_Serveur_Fonctionne

不幸的是,经过一些研究后,似乎静态函数无法访问非静态函数,所以如何才能允许我的函数访问:{{1} }?您是否可以提供有关此内容的更多信息,如果我想在void MainWindow::lancerServeur(){ serveur s; while(bool_Serveur_Fonctionne){ s.receiveDataUDP(); } } bool_Serveur_Fonctionne更改此变量该怎么办?

以下是错误:static function

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

静态函数只能访问类的静态成员,无法访问 this指针。如果你考虑一下,静态方法没有附加到对象的任何实例,所以尝试访问非静态成员是没有意义的(你需要一个对象的实例来做到这一点)。

您有三种选择:

1)使bool_Serveur_Fonctionne成为该类的静态成员。

2)将具有MainWindow访问器的对象(bool_Serveur_Fonctionne)的实例传递给静态方法。

3)传递bool_Serveur_Fonctionne的引用作为静态方法的参数。

注意:

std::atomic<bool>视为bool_Serveur_Fonctionne

的类型

答案 1 :(得分:2)

  

这个函数是静态的,因为我在一个线程中使用它

您可以使用非静态成员函数启动一个线程:

std::thread(&MainWindow::lancerServeur, mainWindowInstance);

答案 2 :(得分:0)

你可以将它作为参数传递给线程函数:

void MainWindow::lancerServeur(MainWindow& obj){
    serveur s;
    // IF bool_Serveur_Fonctionne is public otherwise use some function to 
    //return value of this
    while(obj.bool_Serveur_Fonctionne){
        s.receiveDataUDP();
    }
}

int main(int argc, char* argv[]){
    MainWindow m; 
    std::thread t(MainWindow::lancerServeur, std::ref(m));
    t.join();  
}

修改

更新了@Casey建议的代码。