码迷,mamicode.com
首页 > 编程语言 > 详细

Win32 多线程的创建方法,区别和联系

时间:2015-07-21 20:44:30      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

Win32多线程的创建方法主要有:

  1. CreateThread()

  2. _beginthread()&&_beginthreadex()

  3. AfxBeginThread()

  4. CWinThread类

一、简介

CreateThread: Win32提供的创建线程的最基础的API,用于在主线程上创建一个线程。返回一个HANDLE句柄(内核对象)。在内核对象使用完毕后,一般需要关闭,使用CloseHandle()函数。

_beginthread()&&_beginthreadex():_beginthreadex()可以简单的认为_beginthread()为其简化版,所以更多的时候是使用更简单的_beginthread()

在MSDN中可以看到一句很重要的提示,内容为“For an executable file linked with Libcmt.lib, do not call the Win32 ExitThread API; this prevents the run-time system from reclaiming allocated resources. _endthread and _endthreadex reclaim allocated thread resources and then call ExitThread.”,简单翻译就是说,对于链接Libcmt.lib的可执行程序,不要使用Win32的线程退出函数(ExitThread),这会阻止运行时系统回收分配的资源,应该使用_endthread,它能回收分配的线程资源然后调用ExitThread。这个问题看似没有提到CreateThread(),但是其实有关,这就是经常看到有些资料上坚决的说到”不要使用CreateThread创建线程,否则会内存泄漏“的来源了。

更详细的介绍见http://wenku.baidu.com/view/adede4ec4afe04a1b071dea4.html

AfxBeginThread:这是MFC中的Afx系列函数,一个在MFC中创建线程的全局函数。

CWinThread:UI线程,能接收消息,需要调用AfxBeginThread创建线程。

AfxBeginThread(RUNTIME_CLASS(MyThread))

二、部分参数介绍

dwStackSize:线程堆栈大小,使用0采用默认设置,默认为1024K,所以默认只能创建不到2048个线程(2G内存).windows会根据需要动态增加堆栈大小。

lpThreadAttributes:线程属性。

lpStartAddress:指向线程函数的指针。

lpParameter:向线程函数传递的参数。

dwCreationFlags:线程标志,CREATE_SUSPENDED表示创建一个挂起的线程,0表示创建后立即激活线程。

lpThreadId,先线程的ID(输出参数)


Win32 多线程的创建方法,区别和联系

标签:

原文地址:http://my.oschina.net/shanlilaideyu/blog/481536

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!