切换MFC应用程序清理的线程

时间:2009-11-22 00:34:00

标签: multithreading mfc cuda

我正在尝试清理特定线程创建的特定内存对象(因此只能访问该线程)。我实现这一目标的唯一方法是在释放该内存块时切换到该特定线程。

这是我分配特定内存上下文的方式: http://imagebin.ca/img/S6mwZBFu.jpg

这是我试图做的事情:

alt text http://imagebin.ca/img/DeTe9Z6h.jpg

我最初以下列方式添加了内存上下文创建和销毁:

int Thread2::main()
{
     CudaMemoryContext *theCudaObj = new CudaMemoryContext();
     while(!TerminateStatus())
     {
        ...
     }
     delete theCudaObj;
     return 0;
}

但是,这种方法效果不好,即当我清理“删除theCudaObj”时程序崩溃了。线。我想知道我是否可以在清理时切换活动线程,或者分配CUDA上下文以便两个线程都可以访问,这样我就可以通过两个线程轻松地清理和访问它。提前感谢您的建议。

2 个答案:

答案 0 :(得分:1)

线程#1如何破坏线程#2?通常最好通知线程终止自身而不使用TerminateThread()。

答案 1 :(得分:0)

您的原始方法看起来是正确的方法 - 当线程发出信号终止时,它会停止循环并清理任何已分配的内存。

在您发出线程终止信号的上下文中,请确保在允许应用程序退出之前等待它退出。过早退出可能导致您的崩溃。在附加调试器的情况下运行,并在抛出异常进行诊断时将其设置为break。