CreateThread的说法总结下

     最近看《Windows核心编程》,建立线程最好是用_beginthreadex,退出线程相对的用_endthreadex.这样在结束线程时会将数据块也直接删除掉。

     但在Windows CE中只能够用CreateThread函数。用的时候这里出现问题了,

//回调函数定义

UINT WINAPI CCTestCreateThreadDlg::SocketThreadProc(LPVOID pParam)
{

 CCTestCreateThreadDlg* pThis = reinterpret_cast<CCTestCreateThreadDlg*>( pParam );
 _ASSERTE( pThis != NULL );
 pThis->Run();      //为了调用CCTestCreateThreadDlg中的Run函数强制转换了this指针
 return 1L;
} // end SocketThreadProc

 

//类中的回调函数声明

 static UINT WINAPI SocketThreadProc(LPVOID pParam);

 

//开启线程

 HANDLE hThread=NULL;
 UINT     uiThreadId=0;
    hThread = CreateThread(NULL, // Security attributes
     0, // stack
     SocketThreadProc, // Thread proc
     this, // Thread param
     CREATE_SUSPENDED, // creation mode
     &uiThreadId); // Thread ID 
    return TRUE;  // return TRUE  unless you set the focus to a control
}

结果编译时有如下错误,'CreateThread' : cannot convert parameter 3 from 'unsigned int (void *)' to 'unsigned long (__stdcall *)(void *)'

查了半天,原来是函数入口地址必需这样写,(LPTHREAD_START_ROUTINE)SocketThreadProc

结果又报另外的错,'CreateThread' : cannot convert parameter 6 from 'unsigned int *' to 'unsigned long *'

太郁闷,只好把UINT uiThreadId=0;给改成DWORD dwThreadId=0;这样才把问题都给解决了,居然这都转换不了,看来每个细节的东西都要仔细把握阿!以后要更加仔细、认真

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值