关于强制终止线程的问题
自己开发的动态库 提供的CaptureEnd函数,
在内部实现停止处理线程A,该处理线程A通过回调函数方式把dll库中的数据传给用户,供用户使用,停止过程中,如果用户处理过慢,在停止函数过程中,想要实现如下功能:
如果线程A在执行用户回调函数过程中,用户回调函数长时间不返回,则强行杀掉该线程TiminalThread该线程,结果发现有内存泄露,
请问有什么方法可以实现该策略。
目前做法:
CSnap::CaptureEnd函数中,驱动消息循环结束线程。
DWORD dwExit = 0;
MSG msg;
int nCount = 0;
do
{
Sleep(1);
GetExitCodeThread(m_pProcessTread->GetThreadHandle(), &dwExit);
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
if (nCount > 2000000)
{
m_pProcessTread->Terminate(0);
}
nCount++;
} while( dwExit == STILL_ACTIVE );
m_pProcessTread->CloseThreadHandle();
另一个函数导出接口函数DeviceClose中,销毁该线程所在的对象CSnap, delete m_pSnap.
如果在一个按钮调用CaptureEnd后,点击另一个按钮调用DeviceClose过快,即不等待captureEnd函数执行完,就执行DeviceClose,则销毁对象先执行,导致CSnap中的m_pProcessThread对象失效,而报错。
如果直接强杀掉该线程,然后DeviceClose销毁该对象,则内存泄露。
后来尝试在CaptureEnd 中加互斥段,结果因为是单线程,互斥段失效,现无别的招,请教高手。