创建了16个线程分别控制不同的HID设备,对HID设备进行操作
#define ThreadCount 16
CWinThread* m_pThread[ThreadCount];
HANDLE m_hEvent[ThreadCount];
void CTestDlg::OnBnClickedButton1()
{
int i;
if (m_nStartorStop == 0)
{
m_nStartorStop = 1;
SetDlgItemText(IDC_BUTTON_START, L"停止");
for (i=0; i<ThreadCount; i++)
{
m_hEvent[i]=CreateEvent(NULL,TRUE,FALSE,NULL);
m_pThread[i] = AfxBeginThread(SatrtThreadFunc,&i);
}
}
else
{
m_nStartorStop = 0;
SetDlgItemText(IDC_BUTTON_START, L"启动");
for (i=0; i<ThreadCount; i++)
{
SetEvent(m_hEvent[i]);
Sleep(100);
}
}
}
线程函数如下:
UINT SatrtThreadFunc(LPVOID lpParam)
{
int nclr = *((int*)lpParam);
while(WaitForSingleObject(m_hEvent[nclr],1000)!=WAIT_OBJECT_0)
{
// 操作HID设备,(打开HID、写入、读取、关闭)
}
TRACE("Run:%d\n",nclr);
CloseHandle(m_hEvent[nclr]);
m_hEvent[nclr] = NULL;
return 0;
}
执行“停止线程”操作时,总有几个线程退不出来,实在想不到方法,求各位高手指导啊