我做的是这么一个小程序,全局键盘钩子监控键盘的输入如果按下F10,就CreateThread一个线程
m_Thread = CreateThread(NULL,0,ThreadProc,this,0,NULL);
线程函数中处理如下:
DWORD __stdcall ThreadProc(LPVOID lpParameter) // Ï̺߳¯Êý
{
CKeyDownHookDlg *pDlg = (CKeyDownHookDlg *)lpParameter; //»ñÈ¡¶Ô»°¿òÀàµÄÖ¸Õë
while(true)
{
CString str;
pDlg->m_nCount++;
str.Format("%d",pDlg->m_nCount);
pDlg->GetDlgItem(IDC_XXXXXX)->SetWindowText(str);
pDlg->GetDlgItem(IDC_XXXXXX)->SetWindowText(str);
Sleep(150);
}
delete pDlg;
pDlg = NULL;
return 0;
}
问题就是我打开软件后,直接按F10的话,线程会疯一样的递增值,大家看到我加了一个Sleep了吧直接F10      可以在一瞬间加到3W多,郁闷死人。但是如果我打开软件后等一会,并且拖动一下软件,在启动就没事这是为什么

解决方案 »

  1.   

    要先看看你在键盘HOOK函数里是怎么写的.
      

  2.   

    换用_beginthreadex 创建线程
      

  3.   

    #1 说得对,应该是全局 Hook 实现的问题。
      

  4.   


    请问 _beginthreadex创建的线程如何中止
      

  5.   

    最好是让线程自己return返回,另外线程里不要直接操作界面上的东西,可以在线程中发送消息到主界面线程中,在主线程中去更新界面信息
      

  6.   

    这估计和你的线程关系不大,还是和你启动线程的函数有关系的。具体是CreateThread还是别的函数,完全没有关系。如果启动了多个线程,那就查看为何触发那么多次,TRACE输出信息看看,为何重入那么多次。