使用CreateThread函数创建线程

线程是进程中的一个实体,是被系统独立调度和分派的基本单位。一个进程可以拥有多个线程,但是一个线程必须有一个进程。线程自己不拥有系统资源,只有运行所必须的一些数据结构,但它可以与同属于一个进程的其它线程共享进程所拥有的全部资源,同一个进程中的多个线程可以并发执行。

函数的原型:

HANDLE CreateThread(​          LPSECURITY_ATTRIBUTES lpThreadAttributes,​          DWORD dwStackSize,​          LPTHREAD_START_ROUTINE lpStartAddress,​          LPVOID lpParameter,​           DWORD dwCreationFlags,​          LPDWORD lpThreadID​          );

参数说明:

第一个参数 lpThreadAttributes 表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。

第二个参数 dwStackSize 表示线程栈空间大小。传入0表示使用默认大小(1MB)。

第三个参数 lpStartAddress 表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。

第四个参数 lpParameter 是传给线程函数的参数。

第五个参数 dwCreationFlags 指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。

第六个参数 lpThreadId 将返回线程的ID号,传入NULL表示不需要返回该线程ID号。

返回值

CreateThread的返回值是线程的句柄,失败的话就返回NULL

实例1:

/* 创建第一个线程。主进程结束,则撤销线程。 */

#include<Windows.h>#include<stdio.h>DWORD WINAPI Example_Thread(LPVOID);
void main()
{HANDLE hThread;DWORD threadId;hThread = CreateThread(NULL, 0, Example_Thread, 0, 0, &threadId); // 创建线程printf("我是主线程, pid = %d\n", GetCurrentThreadId()); //输出主线程pidSleep(2000);
}
DWORD WINAPI Example_Thread(LPVOID p)
{ printf("我是子线程, pid = %d\n", GetCurrentThreadId());  //输出子线程pidreturn 0;
}

实例2:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <process.h>typedef unsigned long    DWORD;
#define WINAPI   __stdcall 标准的呼叫;
typedef void far      *LPVOID;DWORD WINAPI mymsg(LPVOID lp)
{MessageBoxA(0,"Hello World","Welcome!",0);return 0;
}
int main(void)
{//顺序执行//MessageBoxA(0,"Hello World","Welcome!",0);//MessageBoxA(0,"Hello World","Welcome!",0);//MessageBoxA(0,"Hello World","Welcome!",0);//MessageBoxA(0,"Hello World","Welcome!",0);int i;HANDLE hthread;DWORD threadid;//保存进程的编号;for (i = 0; i <5; i++){​    hThread = CreateThread(NULL, 0, mymsg, NULL, 0, &threadid);​    //单线程的等待;
​    //INFINITE //超时等待,等待上一步执行完毕才继续执行;
​    WaitForSingleObject(hthread,INFINITE);
​    CloseHandle(hthread);//关闭一个线程;}system("pause");return 0;
}

C++使用CreateThread函数创建线程相关推荐

  1. 使用CreateThread函数创建线程

    线程是进程中的一个实体,是被系统独立调度和分派的基本单位.一个进程可以拥有多个线程,但是一个线程必须有一个进程.线程自己不拥有系统资源,只有运行所必须的一些数据结构,但它可以与同属于一个进程的其它线程 ...

  2. c语言createthread函数,C++中CreateThread函数创建线程的用法和实例

    CreateThread是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程.线程终止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关 ...

  3. CreateThread函数--创建线程

    微软在Windows API中提供了建立新的线程的函数CreateThread, 概述: 当使用CreateProcess调用时,系统将创建一个进程和一个主线程.CreateThread将在主线程的基 ...

  4. CreateThread创建线程函数详细讲解

    CreateThread CreateThread函数创建一个要在调用进程的地址空间中执行的线程.(MSDN讲解如下) 处理CreateThread ( LPSECURITY_ATTRIBUTES l ...

  5. windows系统中创建线程常用哪几个函数,有什么区别?

    windows系统中创建线程常用哪几个函数? 在windows系统中创建线程的函数有: CreadThread,AfxBeginThread,_beginthread,_beginthreadex. ...

  6. _beginthread和CreateThread 创建线程

    建立一个线程. unsigned long beginthread(void(cdecl *startaddress)(void*),unsigned stacksize, void *arglist ...

  7. c++创建线程:CreateThread 和pthread_create和 _beginthreadex

    CreateThread 在 Windows 中,您可以使用 CreateThread() 来创建线程,创建的线程在调用进程的虚拟地址空间中运行.  HANDLE CreateThread(   LP ...

  8. 为什么不能线程调用类的成员函数_C++多线程编程之创建线程的几种方法

    点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 1.线程基础知识 可执行程序运行起来,就会生成一个进 ...

  9. 使用线程——创建线程

    CreateThread函数创建一个进程的新的线程.创建线程必须指定新线程要执行的代码的起始地址.通常,起始地址是程序代码中定义的函数的名称(有关更多信息,请参阅ThreadProc).此函数采用单个 ...

最新文章

  1. iOS端Socket(二)ProtocolBuffer使用
  2. Too many levels of symbolic links
  3. [Tool] 使用CodeMaid自動程式排版 - 摘自网络
  4. leetcode算法题--掷骰子的N种方法
  5. VIJOS-P1192
  6. 小米新机将搭载鸿蒙,小米新機將搭載鴻蒙係統?還得等鴻蒙進一步的消息!
  7. 如何使用TypeScript和Webpack Hot Module Replacement构建Apollo GraphQL服务器
  8. 前端学习(1369):中间件应用
  9. 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数
  10. Android的内容观察者
  11. spring无法连接mysql_初学Spring——连接MySQL数据库的问题和解决
  12. CSocket 和CAsyncSocket类介绍
  13. [模板]线性筛素数(欧拉筛法)
  14. java毕业生设计药品管理系统演示录像 2021计算机源码+系统+mysql+调试部署+lw
  15. [附源码]计算机毕业设计JAVAJAVA大方汽车租赁管理系统
  16. 基于java写的雷霆战机
  17. Java 常用工具类 - 校验身份证 IdCardUtils
  18. Clean Code(整洁代码)
  19. 深入理解Java虚拟机读书笔记七
  20. 抛硬币直到连续2次正面的概率

热门文章

  1. 基于单片机心率脉搏心率血压体温血氧检测系统的设计与实现
  2. 三星SideSync下载,一个神奇的软件_我是亲民_新浪博客
  3. spring封装mongodb的代码实现
  4. CSDN Markdown编辑器之emoji表情
  5. QT开发(五)—— 项目实战:秒表,QTime,Qtimer的使用
  6. Ipad air里面的照片能恢复吗
  7. c++出现 [Error] ** was not declared in this scope类似的问题怎么办?
  8. 剑指offer(2)
  9. 识花君:一款利用人工智能识别花草的小程序
  10. winserver2012上安装vmware报错解决方案