美文网首页💅世间语美图摄影文字゚灵感💋
Win32多线程处理技术【线程的创建】

Win32多线程处理技术【线程的创建】

作者: 307656af5a04 | 来源:发表于2019-07-12 19:12 被阅读16次

线程的创建

线程内核对象

线程的终止

线程的优先级


Windows程序的执行单元

多线程

进程---主线程---辅助线程

主线程在运行过程中还可以创建新的线程,即多线程。在同一进程中运行不同的线程的好处是这些线程可以共享进程的资源,如全局变量,句柄等。各个线程也可以用自己私有的堆栈用于保存私有数据。

线程的创建

线程描述了进程内代码的执行路径。进程内可以有多个线程来执行,为了使他们‘同时’运行,操作系统为每个线程轮流分配CPU的时间片。

一般情况下,应用程序使用主线程接收用户的输入、显示运行的结果,而创建新的线程来处理长时间的操作。

每个线程必须有一个进入点函数,线程从这个进入点开始运行。

1、线程函数

DWORD WINAPI ThreadProc(LPVOID lpParam)

WINAPI是一个宏名,在windef.h文件中声明

define WINAPI _stdcall

_stdcall是新标准C/C++函数的调用方法。调用方法参数的进栈顺序和_cdecl一样,都是从右到左,区别:

_stdcall:自动清栈

cdecl:手动清栈

Windows规定,凡是由它调用的函数都必须定义为_stdcall类型

ThreadProc是一个回调函数,即由Windows负责调用的函数。

2、创建新线程函数

HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttribute,    // 线程安全性
    DWORD dwStackSize m,    //指定线程堆栈大小
    LPTHREAD_START_ROUTINE lpStartAddress,  // 线程函数起始地址
    LPVOID lpParameter, // 传递给线程函数的参数
    DWORD dwCreationFlags,  // 指定线程创建后是否立即启动
    DWORD* lpThreadId  // 用于取得内核给新线程分配的ID号
)

函数执行成功,返回新建线程的线程句柄,lpStartAddress参数指定线程函数的地址,新建线程将从此地址开始执行,直到return语句返回,线程结束,把控制权交给操作系统。

2.1 需要注意的两个参数

lpThreadAttribute:一个指向LPSECURITY_ATTRIBUTES结构的指针,如果需要默认安全属性,传递NULL,如果希望此线程对象句柄可以被子进程继承的话,必须设定一个LPSECURITY_ATTRIBUTES结构。将它的bInheritHandle成员初始化为TRUE。

LPSECURITY_ATTRIBUTES sa;

sa.nLength = sizeof(sa);

sa.lpSecurityDescriptor = NULL;

sa.bInheritHandle = TRUE; // 使CreateThread返回的句柄可以被继承

HANDLE h = ::CreateThread(&sa,...); // 句柄h可以被子进程继承

dwCreateFlags:创建标志,如果是0,表示线程被创建后立即开始执行,如果指定为Create_SUSPENDED标志,表示线程被创建以后处于挂起状态,直到使用ResumeThread函数显式启动线程为止。

3、WaitForSingleObject(hHandle , dwMilliseconds)函数

hHandle:要等待对象的句柄

dwMilliseconds:要等待的时间

该函数用于等待指定的对象变成受信状态

函数返回条件

1)等待的对象变为受信状态

2)参数dwMilliseconds指定的时间已经过去

相关文章

  • Win32多线程处理技术【线程的创建】

    线程的创建 线程内核对象 线程的终止 线程的优先级 Windows程序的执行单元 多线程 进程---主线程---辅...

  • [C++并发编程实战]创建多线程

    不同平台的多线程 POSIX线程 pthread_create Win32线程 CreateThread begi...

  • 多线程

    创建一个多线程 创建多线程-继承线程类 创建多线程-实现Runnable接口 创建多线程-匿名类code

  • 学习笔记(一)

    对多线程的认识 创建线程的方法 继承Thread和实现Runnable。用Runnable接口创建的线程可以处理同...

  • 10.3多线程详解

    Java高级-多线程 多线程创建 多线程通讯 线程池 1.多线程创建 thread/runnable图:继承Thr...

  • 多线程

    多线程技术 多线程技术2 多线程应用 server client join函数

  • Python 多线程笔记

    Python 多线程笔记 创建线程 1. 使用函数创建多线程 2. 使用类创建多线程 继承 Thread 类 重写...

  • IO 多路复用

    IO 多路复用 如何提升并发能力? 多线程模型,创建新的线程处理请求 多进程模型,创建新的进程处理请求 IO 多路...

  • iOS基础知识 (三)

    多线程 多线程创建方式 iOS创建多线程方式主要有NSThread、NSOperation、GCD,这三种方式创建...

  • webwork 前端的多线程解决方案

    多线程技术在web 新标准中,提供新的webworkAPI,让web具有多线程能力. 使用:创建一个Worker对...

网友评论

    本文标题:Win32多线程处理技术【线程的创建】

    本文链接:https://www.haomeiwen.com/subject/xopykctx.html