[英]Strange behavior when multithreading using wxWidgets
我的應用程序中有2個線程-一個UI,第二個正在更新一些數據。 第二個線程的類繼承了wxThread
類,並且具有一些變量,尤其是Worker *worker
。
class Worker {
public:
virtual void work() {}
};
class WorkerThread : public wxThread {
public:
bool isRunning = true;
Worker *worker;
virtual ExitCode Entry() {
while (isRunning) {
if (worker == nullptr) continue;
worker->work();
usleep(UPDATE_DELAY_USEC);
}
std::cout << "Done\n";
return 0;
}
};
如果我將worker的值從第一個線程更改為nullptr
,則應用程序將繼續正常運行。 例如,如果將值更改為new Worker()
或與之相同的值,則應用程序將直接退出。 沒有任何錯誤打印到控制台。
我在wxNotebook
事件中更改此指針:
void onPageChanged(wxBookCtrlEvent &event) {
switch (event.GetOldSelection()) {
case MNP_PROCESSES:
workerThread->worker = nullptr;
break;
}
switch (event.GetSelection()) {
case MNP_PROCESSES:
workerThread->worker = &processes->worker;
break;
}
}
整個奇怪的事情是,如果我將Worker *worker
帶入全局范圍,那么一切都會正常運行,而不會出現任何錯誤。
Worker *worker;
class WorkerThread : public wxThread {
...
是什么原因?
問題解決了。 我一直在尋找沒有問題的問題。 問題是我首先創建了一個wxNotebook
,分別調用了wxNotebook
和onPageChanged
,其中的指針發生了變化,該指針屬於一個尚未創建的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.