【发布时间】:2026-01-02 08:40:02
【问题描述】:
我有一个类 MainWindow 在 thread 中打开一个 server 函数,我需要在我的主线程和我的线程之间共享一个 bool variable,我尝试使用 volatile variable 但它没有工作,这是代码:
//Constructor
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//Some initialisation
...
// Constructs the new thread and runs it. Does not block execution.
bool_Server = true;//Variable supposed to be shared
m_t1 = std::thread(lancerServeur, bool_Server);
}
MainWindow::~MainWindow()
{
delete ui;
bool_Server = false; //Variable supposed to be shared
m_t1.join();
}
void MainWindow::lancerServeur(bool boolServer){
serveur s;
while(boolServer){
s.receiveDataUDP();//Read data in non blocking mode
}
}
volatile 变量是否共享?
【问题讨论】:
-
您正在按值传递变量。怎么可能共享?使用
std::thread(lancerServeur, std::ref(bool_Server))并将bool_Server设为std::atomic<bool>或使用互斥锁等。 -
@Simple 论坛上有人告诉我它有效 ^^'
-
@SimpleDoesn't work,你能用头文件和cpp文件回答吗?
-
@EvansBelloeil '论坛上有人告诉我它有效 ^^'' 显然你接受这个答案有点太快了,并没有阅读那里的所有 cmets .这个答案的作者告诉你一些完全错误的事情。
标签: c++ multithreading qt c++11 network-programming