我的应用程序中有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 {
...
原因是什么?
答案 0 :(得分:0)
问题已解决。我一直在寻找没有问题的问题。问题是我先创建了一个wxNotebook
,分别调用了onPageChanged
,其中的指针发生了变化,该指针属于一个尚未创建的类。