我的程序使启动了一个辅助线程进行后台计算,其中线程函数调用了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;
}
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;
}
解决方案 »
- buffer字符串转成bmp做界面显示
- 关于播放闹铃铃声的问题 很急!!!
- 关于卡巴斯基烦人的问题
- 期待串口方面的高手解决..EscapeCommFunction()问题.
- 100分求教:一个类怎么调用另一个类的成员变量?
- DoModal一个模式框之后如何关闭主窗口却又不退出应用程序.
- 怎么修改已经打开的SOCKET的端口
- 我是vc初学者,我按照书本所说,一步步地建立项目,然后建立.cpp文件,运行时出现下面错误,请问怎样解决?
- 我用的MSDN是。NET2003版的,怎么找不到MFC的资料。另外DIRECTX8。1里面怎么没有DIRECTDRAW的相关资料啊
- 字符串转化为16进制数
- 求《visual c++ 网络编程技术与实例》和《visual c++ 高级网络编程》原码 !100分相送!
- 仅知道窗口句柄HWND,如何得到窗口前景色
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);