ThreadPro.cpp
上传用户:bingyunhe
上传日期:2013-07-06
资源大小:723k
文件大小:2k
- #include "stdafx.h"
- #include "ThreadInfor.h"
- #include <atltime.h>
- UINT ThreadProc(LPVOID lpParam)
- {
- ThreadInfor * lpThreadInfor = (ThreadInfor *) lpParam ;
- TCHAR aChar[9][3] ={{'A','B','C'},{'D','E','F'},{'G','H','I'},
- {'J','K','L'},{'M','N','O'},{'P','Q','R'},
- {'S','T','U'},{'V','W','X'},{'Y','Z',' '}};
- BtnMsg *pBtnMsg ;
- int nClickGap = 1000 ; //击键在500毫秒之内为连续击键
- int nCharCount = 3 ; //字母的个数
-
- // UINT nchar = 65 ;
- while (*lpThreadInfor->lpKillThread == FALSE )
- {
-
-
- pBtnMsg = lpThreadInfor->pBtnMsg ;
-
-
- while(*(lpThreadInfor->lpLock) == TRUE )
- {
- //在循环时,表示等待解锁
- }
- //跳出循环时,锁已经解开了
- //他自己加锁
- *(lpThreadInfor->lpLock) = TRUE ;
-
- POSITION pos = pBtnMsg->GetHeadPosition( ) ;
- int nSendCount = 0 ; //发送的次数
- while( pos != NULL )
- {
-
- CBtnMsg * Btn = pBtnMsg->GetNext(pos ) ;
- //当前位置
- POSITION CuurPos = pos ;
- int nCount = 0 ; //连续击键次数
- int nBtnPre = *(Btn->pBtnNo) ; //前一次的按键序号
- CFileTime ftPre = *(Btn->pCurrTime) ; //前一次的击键时间
- while( CuurPos != NULL )
- {
-
- CBtnMsg * tmpBtn = pBtnMsg->GetNext(CuurPos ) ;
- CFileTime ftCurr = *(tmpBtn ->pCurrTime) ; //本次的击键时间
- int nBtnCurr = *(tmpBtn ->pBtnNo) ; //当前按键序号
- CFileTimeSpan tSpan = ftCurr - ftPre ; // 击键间隔
- if (( nBtnPre != nBtnCurr ) || (tSpan > nClickGap*CFileTime::Millisecond ) )
- {
- pBtnMsg->GetPrev(CuurPos ) ; //回退一个步
- break ;
-
- }
- else
- {
- nCount++ ;
- nBtnPre = nBtnCurr ;
- ftPre = ftCurr ;
- }
- }
- nCount = nCount % nCharCount ;
-
- if ( (nSendCount == 0 ) || (CuurPos != NULL ) )
- {
- ::PostMessage(lpThreadInfor->hWnd , WM_KEYUP,aChar[nBtnPre-1][nCount] ,0) ;
- nSendCount++ ;
- }
- for ( int i =0 ; i<= nCount ; i++ )
- {
- CBtnMsg * ptemp = pBtnMsg->RemoveHead( ) ; //
- if (ptemp != NULL )
- delete ptemp ;
- }
-
- pos = CuurPos ; //将
- // delete ptemp ;
- }
-
- //解锁
- *(lpThreadInfor->lpLock) = FALSE ;
- ::Sleep(500) ;
- }
-
- return 0 ;
-
- }