这是一些伪代码来解释我的情况。我正在使用 QThreads,但解决方案可能与 Qt 无关。
class ResourceOwner
{
// Spawns worker on new QThread, initiates Worker::doWork()
void spawnWorker(resource); {...}
void deleteResourceSafely(); // How do you implement this function?
private:
Resource *resource;
Worker *worker;
}
class Worker
{
void doWork() { while(true) resource->doSomething(); }
void cleanupSelf() {...};
private:
Resource *resource;
}
void main()
{
ResourceOwner owner();
owner.spawnWorker();
...
// Some time later after enough work has been done
owner.deleteResourceSafely();
}
当需要删除时,resource
我们需要关闭工作人员。但是,Worker
可能正在访问resource
.
如果resource
刚刚被删除,那么Worker
会因为访问无效内存而崩溃。我可以停止Worker
属于的线程,但是Worker
没有机会正确清理自己。
那么我该如何中断函数Worker
来doWork()
告诉它自己清理并停止访问resource
呢?