描述:
//创建监控线程
BOOL CTapiAdapter::MyCreateMonitor()
{
//创建线程
hd = (HANDLE)_beginthreadex(NULL,0,&FuncCall,this,0,&LpIDThread);
if(hd==NULL)
{
AfxMessageBox("创建线程失败");
return FALSE;
}
return TRUE;
}
//关闭线程
BOOL CTapiAdapter::MyRemoveMonitor()
{
if(hd!=NULL)
{
SetEvent(hEvent);
WaitForSingleObject(hd,INFINITE);
ResetEvent(hEvent);
if(!CloseHandle(hd)){
AfxMessageBox("关闭线程失败");
return FALSE;
}else{
AfxMessageBox("关闭线程成功");
}
}
hd=NULL;
return TRUE;
}
然后在子线程函数中
//监控线程处理函数
unsigned __stdcall WINAPI FuncCall(LPVOID pParam)
{
CTapiAdapter* apictl = (CTapiAdapter*)pParam;
while(1)
{
Sleep(1000); //休眠10毫秒
if(WAIT_OBJECT_0 == WaitForSingleObject(hEvent,10)){
break;
}
long retevent = apictl->GetTapiEvent();
if(retevent!=-1)
{
...
}
}
return 1;
}
我把这个控件在vb6的程序里面运行。。。结果线程终止的时候发生错误。
然后我把它在vb6下打包成exe,但每次在子线程中执行GetTapiEvent()就发生错误,查了一下,我的GetTapiEvent里面出现了抛出事件的函数,也就是我的子线程通过apictl来抛事件。是不是这个原因发生错误?
请各位帮忙!