例程如下:主程序中,
全局变量
int Start=0;
HANDLE ToKillScanLanHandle;
HANDLE NewhEvent;//自动事件 自动 无信号 事件名
NewhEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
启动一线程CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ReadyToKillHandle),NULL,0,&dw);
DWORD WINAPI ReadyToKillHandle(LPVOID code)
{
again:
WaitForSingleObject(NewhEvent,INFINITE); Sleep(3);
if(ToKillHandle!=NULL)
CloseHandle(ToKillScanLanHandle); goto again;
}定义一定时器
timeSetEvent(100,1,(LPTIMECALLBACK)TimerCallProc,0,TIME_PERIODIC|TIME_CALLBACK_FUNCTION);
void CALLBACK TimerCallProc(UINT uTimerID, UINT uTimerMsg, DWORD dwTimerPointer,DWORD dwReserved1, DWORD dwReserved2)
{
DWORD ID=0;
ToKillHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Scan_1),(void*)&Start,0,&ID);
Start+=1;}
void Scan_1(void *p)
{
DWORD ID=0;
HANDLE h_scan; h_scan=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Scan_2),(void*)&number,0,&ID);
WaitForSingleObject(h_scan,25);//WAIT_OBJECT_0)
CloseHandle(h_scan); SetEvent(NewhEvent); _endthread(); return;
}
void Scan_2(void *p){ Sleep(5000);
_endthread(); return;}程序看起来什么问题都没有,为什么运行时只要不打开其它窗口,本程序的句柄不会增加,但一旦打开其它进程,如IE,句柄数会越来越多呢
全局变量
int Start=0;
HANDLE ToKillScanLanHandle;
HANDLE NewhEvent;//自动事件 自动 无信号 事件名
NewhEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
启动一线程CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ReadyToKillHandle),NULL,0,&dw);
DWORD WINAPI ReadyToKillHandle(LPVOID code)
{
again:
WaitForSingleObject(NewhEvent,INFINITE); Sleep(3);
if(ToKillHandle!=NULL)
CloseHandle(ToKillScanLanHandle); goto again;
}定义一定时器
timeSetEvent(100,1,(LPTIMECALLBACK)TimerCallProc,0,TIME_PERIODIC|TIME_CALLBACK_FUNCTION);
void CALLBACK TimerCallProc(UINT uTimerID, UINT uTimerMsg, DWORD dwTimerPointer,DWORD dwReserved1, DWORD dwReserved2)
{
DWORD ID=0;
ToKillHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Scan_1),(void*)&Start,0,&ID);
Start+=1;}
void Scan_1(void *p)
{
DWORD ID=0;
HANDLE h_scan; h_scan=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Scan_2),(void*)&number,0,&ID);
WaitForSingleObject(h_scan,25);//WAIT_OBJECT_0)
CloseHandle(h_scan); SetEvent(NewhEvent); _endthread(); return;
}
void Scan_2(void *p){ Sleep(5000);
_endthread(); return;}程序看起来什么问题都没有,为什么运行时只要不打开其它窗口,本程序的句柄不会增加,但一旦打开其它进程,如IE,句柄数会越来越多呢
解决方案 »
- 知道一个消息的数值,怎么知道它对应于那个消息?
- MFC中如何使用Pos函数和SubString函数
- 界面有2个文本框和一个按钮。在左文本框输入'B7 C9'这5字符后,按下按钮,在右文本框显示的是 '飞' 这个字,怎样实现啊?我想到头都痛了还想不出。
- 我的VC有问题
- 高分求救,我用atl作了一个activex控件,这个空件调用了一个动态连接库,
- 一个游戏的问题
- 在对话框中,希望鼠标移到BUTTON上时,光标变成手柄状,可按如下程序(见内容),光标无反应,请赐教
- 怎样编写Win2000服务程序???????
- 如何生成这样的序列号呢?
- 用MFC开发小程序是用SDI模式或对话框模式?
- UDP数据包转发问题?
- Window SDK 7.1安装失败
只看到关闭,没看到打开
但我估计是CreateThread这个函数的问题
定时器里创建线程,没有CloseHandle.
不想在定时器里关闭,在
DWORD WINAPI ReadyToKillHandle(LPVOID code)
{again:
WaitForSingleObject(NewhEvent,INFINITE);Sleep(3);
if(ToKillHandle!=NULL)
CloseHandle(ToKillScanLanHandle);goto again;
}
WaitForSingleObject(NewhEvent,INFINITE);Sleep(3);
if(ToKillHandle!=NULL)
CloseHandle(ToKillScanLanHandle);goto again;
为什么不用循环,用goto?
CloseHandle(ToKillHandle);
此ToKillHandle的值并不一定是
ToKillHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Scan_1),(void*)&Start,0,&ID);的值这就难了,这两个线程根本无法保证ToKillHandle的值是一致的