首页 > 编程语言 >29win32编程基础——线程控制

29win32编程基础——线程控制

时间:2023-10-30 17:46:13浏览次数:25  
标签:结束 操作系统 TerminateThread 编程 WaitForSingleObject 29win32 线程 ExitThread

suspendThred挂起线程

ResumeThread恢复线程

结束线程

1、ExitThread

2、线程函数返回,即线程正常结束,正常结束

3、线程强制结束

TerminateThread,告诉操作系统要结束线程

WaitForSingleObject

 

TerminateThread和ExitThread区别是:

1、TerminateThread是异步调用,用于强制终止线程;ExitThread是同步的,执行完后程序才能继续往下执行1

TerminateThread调用后不能保证立即结束线程,在后面写线程结束后要执行的代码可能有问题,解决办法是用WaitForSingleObject.

ExitThread告诉操作系统,去把B线程结束,B线程结束后,然后A线程等待B线程结束,这个时候ExitThread返回
再执行后边代码。

TerminateThread告诉操作系统,去把C线程结束,告诉操作系统之后,继续执行A线程后边的代码,不管C线程结束不结束。

因此TerminateThread使用的时候,一般会考虑加个WaitForSingleObject,这个函数的意思就是,停在这里,等着操作系统告诉A线程,C线程已经结束了,WaitForSingleObject收到操作系统的这个通知,就继续执行后边的代码。

2、ExitThread结束线程会清理线程的堆栈空间,但是TerminateThread结束的时候不清理堆栈空间。

TerminateThread这种方式为什么不清理,因为C线程中的资源可能有别的线程在使用,如果你这个时候结束C线程的时候再清理C线程中的堆栈,那么可能会影响到别的线程的执行,因此微软这样设计,先不清理。

线程上下文CONTEXT

线程切换

线程挂起再恢复,

都要用到CONTEXT,这个结构体保存了执行的所有的寄存器,所以才能切换线程。

多线程与全局变量会出现访问问题,如何解决?

标签:结束,操作系统,TerminateThread,编程,WaitForSingleObject,29win32,线程,ExitThread
From: https://www.cnblogs.com/gusseMe/p/17798416.html

相关文章

  • 实验3 C语言函数应用编程
    实验任务1源代码task1.c1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);8voidprint_spaces(intn);9voidprint_blank_lines(......
  • 深入理解多线程编程和 JVM 内存模型
    文章目录1.理解进程和线程的概念进程(Process)线程(Thread)2.理解竞态条件和死锁竞态条件(RaceCondition)死锁(Deadlock)3.JVM内存模型堆(Heap)栈(Stack)方法区(MethodArea)本地方法栈(NativeMethodStack)PC寄存器(ProgramCounterRegister)垃圾回收4.常见的多线程编程模式生产者-消费者......
  • Linux21--shell编程基础
    1bashshell介绍#介绍shell是一门解释型、弱类型、动态语言#类比shell语法<===>python语法bash解释器<===>python解释器平台<===>平台2变量2.1基本使用###交互式环境中[root@localhost~]#x=1#1定义变量中间不能有空......
  • C++多线程——线程池
    线程池ThreadPool线程池简单来说就是用来管理多个线程的,以避免频繁开辟或销毁线程的情况。以下是创建和使用线程池的基本步骤:创建一个任务队列,用于存储待执行的任务。创建一组线程,这些线程会从任务队列中获取任务并执行它们。将任务提交到任务队列中,由线程池的线程......
  • 在多线程里面,为什么推荐使用notifyAll而不是notify
    在多线程里面,为什么推荐使用notifyAll而不是notify?结论:notify容易造成死锁1、无论使用notify或者notifyAll,都是随机唤醒线程2、notify是随机唤醒一个线程去执行,noifyAll是唤醒所有线程,然后去抢占锁,去执行怎么产生死锁现象:P–生产者调用putproductC–消费者调用c......
  • Tornado实现多线程/多进程的HTTP服务
    用tornadoweb服务的基本流程原文链接1.实现处理请求的Handler,该类继承自tornado.web.RequestHandler,实现用于请求的对应方法如:get,post等。返回内容用self.write方法输出。**2.实例化一个Application。**构造函数的参数是一个Handler列表,通过正则表达式,将请求与Handler对应起来......
  • Python 并发编程
    目录一.理论知识1.1多道技术相关2.1同步和异步阻塞和非阻塞二.进程对象编程2.1开启进程的方式2.2join方法2.3进程间数据隔离2.4进程对象其它方法pid2.4守护进程2.5互斥锁2.6进程之间的通信1,队列Queue模块2,ipc机制3,生产者消费者模式三.线程对象编程3.1开启线......
  • Java技术分享:探索无限可能的编程世界
    作为一门广泛应用于软件开发领域的编程语言,Java在近几十年来一直保持着强大的生命力和广泛的影响力。本文将带您深入探索Java技术的各个方面,并分享一些有关Java编程的实用技巧和最新趋势。Java的优势与特点Java作为一种跨平台、面向对象的编程语言,具有许多独特的优势。首先,它的可......
  • 线程和进程的特点。
    进程系统资源分配的最小单位;每创建一个进程就会消耗一份资源;每个进程都是独立的,所以进程通信比较复杂,通常需要借助外力,如SysVIPC; 线程系统调度的最小单位;栈独立;资源的开销比进程小;全局数据段是共享的,系统资源也是共享的;多进程在同一个环境内运行容易产生竞争,保证......
  • 第四章:并发编程
    第四章:并发编程4.1并行计算导论在过去,大多数计算机只有一个处理组件,称为处理器或中央处理器(CPU)。由于这个硬件限制,计算机程序通常是为串行计算编写的。为了解决问题,算法被设计为逐步解决问题的步骤,并以串行指令流的形式在计算机程序中实现。在只有一个CPU的情况下,一次只能执行一......