我从来不用AfxBeginThread,为什么不直接用API函数CreateThread呢?
我向你保证API函数更容易使用并且具有更高的效率,VC的这个封装意义不大。
DWORD WINAPI MyFunc(LPVOID lpParameter);
利用CreateThread(0,0,MyFunc,&para,0,&id)就可以了;

解决方案 »

  1.   

    不同意楼上说法,对于线程的创建而言,应该尽量少使用api也就是CreateThread而应该尽量使用c/c++的题供的,这样更有利于,C++中的管理,,核心编程里面说得很清楚。
      

  2.   

    to zfan333
    有一点奇怪,
    AfxBeginThread和CreateThread都不是c/c++标准函数,两者区别是有限的,我认为你的说法欠妥,不过CreateThread类似的API函数有很多都存在平台的限制,不利于在平台(microsoft的各种平台)之间移植代码倒是存在的。我的建议是用CreateThread,我一般用这个,而且参阅MSDN也不存在移植性问题,至于其他API,我在使用之前也是必须参阅MSDN,确定没有兼容性问题的时候才用的
      

  3.   

    UINT SampleThreadFunc( LPVOID pParam )
    {
             int i,j;
    for (i = 1;i<10000;i++)
                    for (j=1;j<10000;j++);   //延时
    return 0;
    }调用
    CWinThread * p = AfxBeginThread(SampleThreadFunc,0);
      

  4.   

    我估计你是在参数里面写了SampleThreadFunc(),多了括号,而要求的参数是函数指针
      

  5.   

    AfxBeginThread((AFX_THREADPROC)SampleThreadFunc, pParam);创建线程时这一点开销不大, 谁的程序也不会一秒钟生成100个线程再撤销99个... 
    这个不能构成理由...
      

  6.   

    AfxBeginThread的回调函数一定只能声明为
    UINT threadbackproc( LPVOID lParam )
    AfxBeginThread的第二个参数传递你想要传给线程的参数的指针。
    在回调函数中作类型转换。
      

  7.   

    to ForApply(冷静燃烧):
    zfan333(whale)说的正确. 这并不是你认为的移植性的原因. 关键在于C/C++运行库中有些函数为了保证线程安全, 需要在线程创建时做一些附加工作, 比如分配THREAD LOCAL STORAGE. 这些工作底层API不会为你做, 因为它并不知道你用的是什么库, 甚至是不是C语言. 所以C运行库提供_beginthreadex, MFC提供AfxBeginThread来包装底层API, 并且做附加的工作. 建议你去看Jeffrey Ritcher的"Windows核心编程".也许你并没有直接用那些库函数, 但是你并不知道MFC或者其他库用了没有. 除非你对你所用的库的实现非常了解, 而且也可以预见将来实现的可能发生的变化. 当然这不太可能, 因此, 作为一个原则, 使用高层库提供的包装函数, 比使用底层的函数要安全. 你可以看到AfxBeginThread里是也是调用_beginthreadex而不是API函数CreateThread.
      

  8.   

    pfnThreadProc函数指针所指的函数名在调用的文件中未声明,导致将其当作int变量。
      

  9.   

    to fengye():
      见教了,呵呵,我是说的一个相关问题,API函数几乎所有部分都是和系统密切相关的,MSDN中明确注释在各种操作系统中的差异(例如2000和CE和98),而运行库相对而言要好的多,所以我也不是很赞同使用API,但是API使用比运行库要简单的多,如果确定在移植性良好的情况下,我还是使用API,
      

  10.   

    实际上,我们说的大约也是同样一种问题,就是API本身封装了那些地方,或者存在那些差异,CreateThread和AfxBeginThread的确是不同,但是这些差异在MSDN中有详尽的描述,我觉得在明确差异的情况下使用API倒也不是一件坏事情