问题1、_beginthreadex创建线程时,返回:0
:参数不对,导致
说明:1参,线程的安全等级,经常使用NULL
2参,线程的堆栈空间大小,如果为0,使用和调用进程相同的空间,经常使用0
3参,线程函数的起始地址,这个是我们线程任务的处理中心
4参,线程函数的参数,与一般的函数参数类似,如果需要传入多个参数,可以使用结构
5参,线程的起始状态,0 == 立即执行, CREATE_SUSPEND == 暂时挂起
6能,线程的ID,线程的标识,至今还没有使用到它的地方
问题2、线程和事件的结合使用
我通常使用事件的有无消息实现线程的定时执行功能,简单步骤如下:
2.1、创建事件对象 HANDLE hMsgEvent = ::CreateEvent(NULL,/*安全属性*/, FALSE/*是否手动重置事件*/, TRUE/*事件的初始信号状态*/, NULL/*事件的名称,一般设置成NULL即可*/); long lTimeInterval = 60000; //线程的执行间隔
2.2、使用_beginThreadEx()创建线程
2.3、在线程函数中,
unsigned _stdcall ThreadProc(void * pArgu)
{
while(bThreadExit)
{
DWORD dwWaitRet = ::WaitForSingleObject(hMsgEvent, lTimeInterval);
switch(dwWaitRet)
{
case WAIT_OBJECT_0:
//有信号
break;
case WAIT_TIMEOUT:
//超时
//你要间隔执行的代码
//......
break;
case WAIT_FAILED:
//出错
break;
default:
break; //常规处理
}
}
return 0;
}
备注:我只是利用超时实现线程的定时触发,你也可以设计多种形式的定时触发机制。