使用 wxWidgets 进行多线程处理时出现奇怪的行为
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 << "Donen";
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
,onPageChanged
被调用,其中指针发生了变化,它属于尚未创建的类。
相关文章:
- 多线程处理中的静态成员变量
- Opencv cpp 使用多线程处理同一视频的不同部分
- 对象析构函数在多线程处理时不断被调用,但该对象并未超出范围
- 使用 wxWidgets 进行多线程处理时出现奇怪的行为
- 通过多线程处理确定每个字符在文件中出现的次数
- 使用多线程处理的异步请求
- 多线程处理,同时保持部分序列
- 如何在类中进行 c++ 多线程处理(将线程引用保留为成员 var)
- SDL 带变量的多线程处理 -- 无法按预期工作
- 使用多线程处理对象数组 - 无效使用 void 表达式错误
- 如何使用"priority"进行多线程处理?
- 使用简单的过程进行慢速多线程处理
- C++11 使用共享对象的多线程处理
- 在多线程处理时将参数传递给函数
- 使用 vfork 进行多线程处理
- C++ 多线程处理速度慢
- 在 c++ 中多线程处理时与 cout 和 printf 的区别
- 使用windows.h库中函数的多线程处理
- 具有重载成员函数的多线程处理
- 将 rng 的列表存储在 std::array 中以进行多线程处理