我就是想使用_beginthreadex来创建线程,可是告诉我不行:
{
     HANDLE  hThread[3] = {0};
     DWORD   dwThreadID = 0;     hThread[0] = _beginthreadex( NULL, 0, myThread01, NULL, 0, &dwThreadID );
}DWORD WINAPI myThread01(PVOID pPara )
{
    return 0;
}编译时提示说:
error C2664: “_beginthreadex”: 不能将参数 3 从“DWORD (__stdcall *)(PVOID)”转换为“unsigned int (__stdcall *)(void *)”
用CreateThread可以,这是为什么?

解决方案 »

  1.   

    我看到有的代码里有这种数据类型:event
    请问:event和CreateEvent有联系么?
    MFC开发中的代码。
      

  2.   

    那你就把DWORD WINAPI myThread01(PVOID pPara ) 
    改成UINT WINAPI myThread01(PVOID pPara )嘛
      

  3.   

    DWORD 不就是 unsigned int 么?
      

  4.   

    解决办法:将myThread01函数声明为static类型。
      

  5.   

    自己对应一下类型吧。typedef unsigned long DWORD;
    typedef unsigned int UINT;
    typedef void *LPVOID;
      

  6.   

    是这样在windows平台对C++ run time Library进行了一次封装,使之只适用于windows平台,而以前的C++ run time Library可以直接用于linux.那么windows中创建线程方法就有自己的版本,windows编程把
    _stdcall重定义成WINAPI
    void*  重视义成LPVOID
    unsigned long重定义成DWORD
    unsigned int 重定义成UINT
    所以说C++ run time Library中创建线程的方法:
    unsigned int (__stdcall *)(void *)” 
    到了windows平台就是:
    DWORD (WINAPI*)(LPVOID) //这里的WINAPI限定符不必显式写出.CreateEvent用于创建事件event,它返回一个事件句柄,这个函数可以决定事件是手动方式还自动方式,最初状态是有信号的还是无信号,另外还可以为事件命名,方便事件跨进程.
      

  7.   

    myThread01的声明是什么?
    不能是类的普通成员函数,只能是类的静态成员函数或全局函数