新开子线程时CreateThread()与AfxBeginThread()有何区别? CreateThread()是Windows的API函数,线程优先级需由另一个函数确定,AfxBeginThread()由MFC提供,有很多低级控制已经封装。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是问CWinThread.createthread()与AfxBeginThread()它们都是MFC的函数.可它们用于新开子线程时有保区别?用时应注意些什么? AfxBegingThread用到了CWinThread,你只要管理一个句柄就够了。使用CWinThread你得管理一个类的对象。失误之处请指教。 那么使用AfxBegingThread()和使用CWinThread.createthread()各有什么优点?及不便? 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创建线程。 实际上,这三个函数之间存在一定的调用关系,第一个纯粹一些,后两个完成自己相应的工作之后,调用前者实现线程的创建。 CreatThread和AfxBeginThread好象的确有一些不同。似乎CreatThread时,退出时线程对象不会被删除。AfxBeginThread就会。 两个的实质都是一样的,不过AfxBeginThread返回一个CWinThread的指针,就是说他会new一个CWinThread对象,而且这个对象是自动删除的(在线程运行结束时),给我们带来的不便就是无法获得它的状态,因为随时都有可能这个指针指向的是一个已经无效的内存区域,所以使用时(如果需要了解它的运行状况的话)首先CREATE_SUSPENDED让他挂起,然后m_bAutoDelete=FALSE,接着才ResumeThread,最后不要了delete那个指针。CreatThread就方便多了,它返回的是一个句柄,如果你不使用CloseHandle的话就可以通过他安全的了解线程状态,最后不要的时候CloseHandle,Windows才会释放资源,所以我一般使用CreatThread,方便。 【求助】关于2个串口读取的问题,谢谢大家 获取web数据时的内存泄露。 关于MFC上使用报表打印 想知道 招聘Win下应用程序开发工程师(MFC/VC++) 在View类调Dlg类的OnPaint函数 怎样将CListCtrl控件(Report类型)中的内容复制粘贴到Excel中啊?! 数字格式化问题 图像打印 奇怪为什么我定义的全局变量在其他cpp中不能用? 答对送100分 一个非常简单的问题(见者有分)
它们都是MFC的函数.
可它们用于新开子线程时有保区别?
用时应注意些什么?
失误之处请指教。
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创建线程。 实际上,这三个函数之间存在一定的调用关系,第一个纯粹一些,后两个完成自己相应的工作之后,调用前者实现线程的创建。
似乎CreatThread时,退出时线程对象不会被删除。
AfxBeginThread就会。
CreatThread就方便多了,它返回的是一个句柄,如果你不使用CloseHandle的话就可以通过他安全的了解线程状态,最后不要的时候CloseHandle,Windows才会释放资源,所以我一般使用CreatThread,方便。