我的程序使启动了一个辅助线程进行后台计算,其中线程函数调用了dll中的一个函数,有时候需要中途终止该线程的执行,但是所调用的dll中的函数需要很长实践才能退出,强行退出的话会出现异常,请问有没有什么方法能快速安全的退出这个线程呢?以下是我的线程函数:
UINT TrdFun(LPVOID lp)
{
mwArray basepara;
mwArray parterr;
ThreadPara* p;
p=(ThreadPara*)lp;
basepara=p->BasePara;
parterr=p->PartErr;
//开始计算
Result=simusolution(basepara,parterr);//调用的dll中的函数
//置完成事件为有信号状态,通知视图刷新
g_evtCalFinished.SetEvent();
CalStatus=0;
return 0;
}

解决方案 »

  1.   

    有,看这段代码,估计对你有用:
    HANDLE m_hEvent = ::CreateEvent(NULL,TRUE,FALSE,"");
    ::ResetEvent(m_hEvent);
    m_pInfoWorkThread = ::AfxBeginThread(InfoTipThreadFunction,NULL);UINT CTaskMngApp::InfoTipThreadFunction(LPVOID lParam)
    {
    for (;;)\\服务线程。
    {
                      //这里做你自己的工作。 if (WAIT_OBJECT_0 == ::WaitForSingleObject(m_hEvent,300000))
                       \\每5分钟检查一次是否需要线程退出,你可以自己设置。
    {
    ::CloseHandle(m_hEvent);
    return 1;
    }
    }
    return 1;
    }然后在你需要退出线程的地方:
    ::SetEvent(m_hEvent);
      

  2.   

    楼主的程序主要原因是调用了dll最后没有及时关闭,等视图刷新后,程序运行完,才退出dll的调用,所以会反应很慢!