CreateThread()是Windows的API函数,线程优先级需由另一个函数确定,AfxBeginThread()由MFC提供,有很多低级控制已经封装。

解决方案 »

  1.   

    我是问CWinThread.createthread()与AfxBeginThread()
    它们都是MFC的函数.
    可它们用于新开子线程时有保区别?
    用时应注意些什么?
      

  2.   

    AfxBegingThread用到了CWinThread,你只要管理一个句柄就够了。使用CWinThread你得管理一个类的对象。
    失误之处请指教。 
      

  3.   

    那么使用AfxBegingThread()和使用CWinThread.createthread()各有什么优点?及不便?
      

  4.   


    CreateThread:是Windows的API函数,直截了当的创建了线程。 它没有考虑:(1)C  Runtime中需要对多线程进行纪录和初始化,以保证C函数库工作正常(典型的例子是strtok函数)。(2)MFC也需要知道新线程的创建,也需要做一些初始化工作(当然,如果没用MFC就没事了)。_beginthreadex:MS对C Runtime库的扩展函数,首先针对C Runtime库做了一些初始化的工作,以保证C Runtime库工作正常。然后,调用CreateThread真正创建线程。AfxBeginThread:MFC中线程创建的函数,首先创建了相应的CWinThread对象,然后调用CWinThread::CreateThread, 在CWinThread::CreateThread中,完成了对线程对象的初始化工作,然后,调用_beginthreadex创建线程。  实际上,这三个函数之间存在一定的调用关系,第一个纯粹一些,后两个完成自己相应的工作之后,调用前者实现线程的创建。
      

  5.   

    CreatThread和AfxBeginThread好象的确有一些不同。
    似乎CreatThread时,退出时线程对象不会被删除。
    AfxBeginThread就会。
      

  6.   

    两个的实质都是一样的,不过AfxBeginThread返回一个CWinThread的指针,就是说他会new一个CWinThread对象,而且这个对象是自动删除的(在线程运行结束时),给我们带来的不便就是无法获得它的状态,因为随时都有可能这个指针指向的是一个已经无效的内存区域,所以使用时(如果需要了解它的运行状况的话)首先CREATE_SUSPENDED让他挂起,然后m_bAutoDelete=FALSE,接着才ResumeThread,最后不要了delete那个指针。
    CreatThread就方便多了,它返回的是一个句柄,如果你不使用CloseHandle的话就可以通过他安全的了解线程状态,最后不要的时候CloseHandle,Windows才会释放资源,所以我一般使用CreatThread,方便。