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

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(输出参数)

时间: 2024-10-26 08:47:26

Win32 多线程的创建方法,区别和联系的相关文章

多线程的创建方法

- (void)viewDidLoad {    [super viewDidLoad]; //第一种开启新的线程调用 mutableTheard    NSThread * t = [[NSThread alloc]initWithTarget:self selector:@selector(mutableTheard) object:nil];    [t start];            //第二种开启新的线程调用 mutableTheard    [NSThread detachNe

Java多线程的创建方法

Java 线程类也是一个 object 类,它的实例都继承自java.lang.Thread 或其子类. 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: Tread thread = new Thread(); thread.start(); 在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了. 编写线程运行时执行的代码有两种方式:一种是创建Thread 子类的一个实例并重写 run 方法,第二种是创建类的时候实现 Runna

win32多线程 (一) 线程创建与结束等待

#include "stdafx.h"#include <Windows.h>#include <iostream> using namespace std; DWORD WINAPI ThreadFuncFirst(LPVOID param){ int iCount = 50; while(iCount--){  cout<<"\nThreadFuncFirst:"<<iCount; } return 0;} DWO

java多线程创建方法

1.继承Thread类 2.实现Runnable接口 3.两种实现方法之间的关系 4.实例 sleep是属于Thread类的静态函数. /** * aThread.java * @author cjc */ public class aThread extends Thread { public void run() { for(int i=0;i<10;i++) { System.out.println("The son thread1 is running..."); try

多线程和多进程的区别与联系

1.单进程单线程:一个人在一个桌子上吃菜.2.单进程多线程:多个人在同一个桌子上一起吃菜.3.多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了...此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢. 1.对于 Windows 系统来说,[开桌子]的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜.因此 Windows 多线程学习重点

JAVA学习第二十二课(多线程(二))- (多线程的创建方式一 :继承Thread类)

线程是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 创建新执行线程有两种方法. 一种方法是将类声明为 Thread 的子类.该子类应重写Thread 类的run 方法.另一种方法是声明实现 Runnable 接口的类.该类然后实现run 方法. 创建线程方式一:继承Thread类 一.创建线程的步骤: 1.定义一个类继承Thread类 2.覆盖Thread中的run()方法 3.直接创建Thread类子类的对象 4.调用start方法开启线程,并调用线程的任务run方法

多线程和多进程的区别【转载网络】

在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一个执行线程), Java的Web容器Tomcat.Websphere等都是多线程的(每客户连接对应一个线程,所有线程都在一个进程中). 从Unix发展历史看,伴随着Unix的诞生进程就出现了,而线程很晚才被系统支持,例如Linux直到内核2.6,才支持符合Posix规范的NP

Win32多线程程序设计

Win32多线程程序设计 "多线程多任务"是程序开发者和用户都需要的一个重要资产.从WindowsNT开始,完全支持32位程序的抢占式多任务.带领我们进入了"多线程多任务"时代. 基本概念 进程(processes) 从win32角度来看,进程含有内存和资源,被进程拥有的内存理论上可达2GB,资源包括内核对象(handle,mutex-),user资源(对话框,字符串-),GDI资源(cdc和brush-). 内存(memory) 每个进程存储数据的地方,分为: C

再谈多线程编程(一)——线程的概念、多线程的创建、守护线程、线程状态的转化

1.什么是线程以及多线程与进程的区别 在现代操作在运行一个程序时,会为其创建一个进程.例如启动一个QQ程序,操作系统就会为其创建一个进程.而操作系统中调度的最小单位元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器,堆栈和局部变量等属性,并且能够访问共享的内存变量.处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行.因此我们可以这样理解: 进程:正在运行的程序,是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 线程:是进程中