C++ 如何删除从CWinThread派生的对象

C++ 如何删除从CWinThread派生的对象,c++,multithreading,mfc,C++,Multithreading,Mfc,我有这样的代码 X *m = new X(); // X - class derived from CWinThread; m->CreateThread(CRREATE_THREAD); m->b_AutoDelete = false; x->ResumeThread; 在函数run中,我有一些在循环中运行的代码 当我尝试删除m时,通常会出现异常 我是否需要在删除之前执行一些操作,可能是m->Suspend或其他操作 代码在Windows 7上运行很难说,但它可能会崩溃,

我有这样的代码

X *m = new X(); // X - class derived from CWinThread;

m->CreateThread(CRREATE_THREAD);
m->b_AutoDelete = false;
x->ResumeThread;
在函数run中,我有一些在循环中运行的代码

当我尝试删除
m
时,通常会出现异常

我是否需要在
删除
之前执行一些操作,可能是
m->Suspend
或其他操作


代码在Windows 7上运行很难说,但它可能会崩溃,因为在删除对象时,您可能会从线程底部拉出地毯


结束线程的好方法是首先告诉它停止。这通常是通过线程函数检查的布尔标志来完成的。它将让线程函数以一种很好的方式处理清理。完成后,可以使用另一个布尔标志进行检查,然后您可以自由删除该对象。

我认为您不会使用
new
创建线程,但您必须调用这样的函数。从外部杀死线程通常不是最干净的解决方案(例如,线程运行时没有清除代码等)。通常设置一个条件(比如事件)并让线程自行终止。一旦线程终止,就可以安全地删除包裹它的C++对象。