多线程1--Abort和Interrupt方法讲解及代码范例

18.EC实战 新建项目工程并配置各个引脚的工作方式(持续更新) 本博文介绍了从零开始新建EC工程及对各个引脚进行了工作模式的初始化配置 阅读详情

1.Abort()方法:Abort挂起线程后相当于完全关闭该线程,该线程将不会被唤醒

 //Interrupt挂起线程,被挂起的线程可以唤醒

static void Main(string[] args)
        {
         
            Thread thread1 = new Thread(TestAbort);
            thread1.Name = "Thread1";
            thread1.Start();
            Thread.Sleep(1000);
            thread1.Abort();
            thread1.Join();
            Console.WriteLine("finally语句块后,线程{0}主线程的状态:{1}", thread1.Name, thread1.ThreadState);
            Console.ReadKey();
        }

       

public static void TestAbort() 
        {
            try
            {
                Thread.Sleep(10000);
            }
            catch 
            {
                Console.WriteLine("线程{0}接受到被释放销毁的信号",Thread.CurrentThread.Name);
                Console.WriteLine("捕获到异常时线程{0}主线程的状态:{1}",    Thread.CurrentThread.Name,Thread.CurrentThread.ThreadState);
            }
            finally
            {
                Console.WriteLine("进入finally语句块后线程{0}主线程的状态:{1}", Thread.CurrentThread.Name, Thread.CurrentThread.ThreadState);
            }
        }

在已挂起的线程上调用 Abort,则将在调用 Abort 的线程中引发 ThreadStateException,并将 AbortRequested 添加到被中止的线程的

ThreadState 属性中。直到调用 Resume 后,才在挂起的线程中引发 ThreadAbortException。如果在正在执行非托管代码的托管线程上调用 Abort,

则直到线程返回到托管代码才引发 ThreadAbortException

2.Interrupt()方法:该方法挂起线程后可以被唤醒

 class Program
    {
        //Interrupt挂起线程,被挂起的线程可以唤醒
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(TestInterrupt);
            thread1.Name = "Thread1";
            thread1.Start();
            thread1.Interrupt();
            thread1.Join();
            Console.WriteLine("finally语块后,线程{0}的状态{1}", thread1.Name, thread1.ThreadState);
            Console.ReadKey();

        }
        public static void TestInterrupt()
        {
            try
            {
                Thread.Sleep(3000);
            }
            catch (ThreadInterruptedException ex)//抛出ThreadInterruptedException异常时,说明该线程不在等待,等于唤醒该线程
            {
                Console.WriteLine("线程{0}接收到被Interrupt的信号", Thread.CurrentThread.Name);
                Console.WriteLine("捕获到Interrupt异常时线程{0}的状态{1}", 
                    Thread.CurrentThread.Name, Thread.CurrentThread.ThreadState);
            }
            finally
            {
                Console.WriteLine("进入finally语句块后线程{0}的状态:{1}", Thread.CurrentThread.Name,
                    Thread.CurrentThread.ThreadState);
            }
        }
    }

 

Interrupt 方法将当前的调用该方法的线程处于挂起状态,同样在调用此方法的线程上引发一个异常:ThreadInterruptedException,和Abort方法不同的是,被挂起的线程可以唤醒.

如果它的中断状态被改变,那么它就会抛出ThreadInterruptedException异常,意思就是这个线程不能再等待了,其意义就等同于唤醒它了。

长时间sleep的线程被唤起的时候,可以使用到该方法

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机) 本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适 阅读详情

相关推荐

经典EMC案例-汽车车载电子行车记录仪显示屏EMC BCI整改案例

拿到这款汽车前装车载电子行车记录仪,小编首先在实验室还原客户描述的现象,确定现象符合客户的描述,再根据现象出现的对应频率做好记录,因为通常BCI FAIL的现象不局现于一个频率点,然后通过这些现象及频点,再结合产品的构造、线束,分析构思出大致解决方案。

jack_luo4913的博客 3737

C#中的线程之Abort陷阱

1.简介 C#中通常使用线程类Thread来进行线程的创建与调度,博主在本文中将分享多年C#开发中遇到的Thread使用陷阱。 Thread调度其实官方文档已经说明很详细了。本文只简单说明,不做深入探讨。 如下代码展示了一个线程的创建与启动 static void Main(string[] args) { Thread thd = new Thread(new ThreadStart(TestThread)); thd.IsBac

CJyoung的博客 3620

保姆级教程:用海康威视老版存储服务器+IVMS-4200搭建本地监控录像(附软件获取与开机自启)

最近在帮朋友搭建一套小型监控系统时,遇到了一个颇具挑战性的问题:手头有几台海康威视网络摄像头,但官方已经下架了配套的存储服务器软件。经过一周的摸索和测试,终于找到了一套可靠的解决方案。本文将完整分享从软件获取到系统稳定运行的全过程,特别适合那些不想额外购买NVR设备,又需要本地存储监控录像的个人用户或小型企业IT管理员。

weixin_30553777的博客 513

interrupt-java多线程100例-5

在java中一个线程开始执行后,如果想停止它在早起的时候我们可以使用stop方法。但是这个方法台暴力了,如果线程在处理一些很重要的工作可能只执行到一半,就被停止了。然程序执行结果很难控。 后来引入了interrupt方法。 当调用interrupt()方法后并不是把执行中的线程马上中断而是给线程一个标记。 我们自己new出来的线程中可以自己加逻辑判断,是否是有其他线程想中断自己,如果是可以做出自己的选择是否中断。 相关的方法有三个: interrupt() -- 向某个线程发出中断信号,并将该线程

pengweismile的专栏 195

基于QT的华为网络摄像头二次开发

第一次使用华为的网络摄像头并进行二次开发,网上关于QT对华为网络摄像头的二次开发的文章很少,基于项目的需求做了一些工作,特此记录。 目标: 1、实时预览 2、手动控制录制视频 3、监听告警型号 4、实时获取元数据中的划定区域内的人数 摄像头型号如下: 准备工作: 在购买摄像头后,应当在官网下载对应的开发资料,如果需要权限,则联系华为的技术支持人员。下载资料如下: SDC Development Kit Demo 8.0.T9 SDK DEMO下载地址:https://bbs.hua

xumingyifrend的博客 3169

SerDes电路的PCB仿真设计规则及策略

SerDes的PCB设计中,重点工作是使用3D 电磁 (EM) 场求解器,进行过孔结构优化,包括 BGA的扇入和扇出区域以及布线的过孔区域,并且,利用连接器供应商提供加密的 3D 模型,进行连接器和 PCB 的级联仿真,最终获取系统级的通道性能参数,如插入损耗、回波损耗、串扰和模式转换、阻抗曲线等,如果发现任何缺陷,再进行进一步优化,这一过程中,推荐进行拆分仿真,以提高设计效率。

一只豌豆象的博客 2192

Java 多线程 之 火车站售票实例

http://www.verejava.com/?id=16992917973569package com.thread; /* 题目: 人们在火车站的售票窗口排队买火车票 1. 北京西站开门 2. 打开售票窗口 3. 北京西站有10张去长沙的票 4. 打开2个售票窗口, 5 假设每个售票窗口每隔1秒钟买完一张票 1. 根据 名词 找类 人们(Person), 火车站(St...

verejava的博客 1703

【2026年华为暑期实习(AI)-4月29日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要涵盖了机器学习和深度学习中的多个核心概念与技术,包括非负矩阵分解、条件数、MobileNet创新点、LDA降维、大模型评测指标、半精度训练、多任务学习、GPU存储层次、正则化、张量并行等。通过12道单选题和8道多选题的形式,系统性地考察了相关理论原理、应用场景及工程实践要点。题目设计注重概念准确性(如LDA目标函数)、技术细节(如Megatron-LM的并行策略)与实际应用(如FP16训练动机),并包含概率统计(二项分布)和数值计算(微分误差分析)等数学基础内容,全面检验读者对AI领域关键知识的掌握

m0_73659489的博客 143

C++多线程Trap 1: 没有预见的Abort

std::thread使用中容易忽略的小陷阱

DU_YULIN的博客 498

UNet改进(47):Deformable Convolution在UNet中的集成与应用

本文提出了一种可变形U-Net(DeformableUNet)结构,通过在U-Net的双卷积模块中集成可变形卷积(DeformConv2d)来提升模型对物体形变和复杂结构的建模能力。传统卷积受限于固定感受野,而可变形卷积通过动态调整采样位置,能更好地适应不规则形状。实现中,在DoubleConv模块的第二个卷积层替换为可变形卷积,同时保持第一层为标准卷积以确保稳定性。实验表明,该方法在保持参数量基本不变的情况下,显著提升了分割精度(mIoU从0.712提升到0.743)。

2501_91516851的博客 201

深入浅出之ADown降采样模块(YOLO)

YOLOv9中的ADown模块是一种用于目标检测任务中的下采样操作的卷积块。在深度学习模型中,下采样(downsampling)是减少特征图空间维度的常用技术,它有助于模型在更高层次上捕捉图像的特征,同时减少计算量。ADown模块的设计旨在以一种高效且对性能影响较小的方式进行这一操作。

浩瀚之水的专栏 4173

C#多线程开发5:线程的Abort和Interrupt方法

使用线程的Abort方法可以终止线程;而使用线程的Interrupt方法只可以中断处于 WaitSleepJoin 状态的线程,当线程状态不再为 WaitSleepJoin时,线程将恢复执行。在线程上调用Abort方法会引发 ThreadAbortException异常,调用Interrupt方法则会引发ThreadInterruptedException异常。 下面的实例演示了Abort和In

三五月儿的专栏 8002

YOLO26 旋转框检测 OBB 技术:角度预测与解码优化

YOLO26旋转框检测技术通过CSL角度编码有效解决了OBB检测中的周期性问题。该技术采用5参数表示法(cx,cy,w,h,θ),在检测头中分别处理分类、回归和角度预测。核心创新点包括:1)使用高斯或三角窗口的CSL编码对角度进行平滑表示;2)通过加权平均解码角度,避免边界不连续问题。该方法在遥感、文本检测等需要精确方向信息的场景中表现优异,相比传统HBB框可提升定位精度30%以上,同时保持了YOLO系列的高效特性。

一键难忘的博客 522

C#多线程学习笔记之(abort与join配合使用)

今天刚开始学多线程,尽管以前用过一点点,但是只是照着网上代码抄,没有真正理解,现在回过头来想研究研究,慢慢弄懂,下面就是我在网上所找资料的例子,相信大家都看过,做了小点改动 View Code 1 namespace 多线程 2 { 3 public class Simple 4 { 5 6 public static

htsnoopy的专栏 473

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

多线程编程学习笔记(一)

多线程编程笔记(一)操作线程1、操作实例using System;using System.Threading;namespace AppThreadDemo{ class App {  static public void threadMethod()  {    Console.WriteLine("/n执行ThreadMethod的线程的代码为:{0}",Thread.CurrentThre

HAHA 2281

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

线程停止.interrupt

package com.business.thread; public class EndThread { private static class useThread extends Thread { public useThread(String name) { super(name); } public void run() { //isInterrupte...

sinat_28995003的博客 193

多线程——基本概念、生命周期、生产者消费者模型

基本概念:拜托!别再问我多线程的这些问题了 生命周期:10 张图聊聊线程的生命周期和常用 APIs(在微信公众号“码农田小齐”里) 生产者消费者模型:多线程必考的「生产者 - 消费者」模型,看齐姐这篇文章就够了 全部是转载,感觉人家总结的全面到位,自己再写已经没有提升空间了 ...

weixin_42935398的博客 1350

玩转java多线程学习篇四 Thread类的常用API之currentThread,isAlive,sleep,interrupt,isInterrupted,stop

前言 该篇中主要学习Thread类的常用API,currentThread,isAlive,sleep,interrupt,isInterrupted,stop,suspend,resume,yieId,join,wait,notify,notifyAll,start等方法的使用以及详解。 1:currentThread() 返回正在调用的线程信息。

qq_15988615的专栏 818

学习系列一:多线程理解

开始写对多线程的理解。主要就写 Thread 和 Task 的应用吧。 一、Thread 二、Task

Ocean111best的博客 671

C#笔记整理之线程(一)

线程基础概念: 1.线程有时被称为轻量级进程,是程序执行流得最小 单位 2.线程是由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。 3.线程自身不能拥有系统资源,但是可以使用线程所属进程所占有的系统资源 4.线程可以创建和撤销另一个线程 5.线程可以拥有自身的状态,例如 运行状态,挂起状态,销毁释放状态等等 6.线程具有优先级,每个线程都分配了0-31级别的其中一个优先级,数字越大,优先级越高,然而手动分配优先级过于复杂,所以微软为我们的Thread类提供一个优先级的枚举,ThreadP

冰镇油条 390

5天不再惧怕多线程——第一天 尝试Thread

作者: 转自:

老瓦的笔记本 3427

.net 多线程初步(1)

Thread类常用的几个基本方法1.Start、Join和Sleep这是线程操作最基本的了,启动、销毁和延迟。using System;using System.Threading;public class StartJoinSleep{ public static void Main()  {  ThreadStart myThreadStart = new ThreadStart(firs

目前没想好. 1178

【转载】5天不再惧怕多线程——第一天 尝试Thread

原本准备在mongodb之后写一个lucene.net系列,不过这几天用到多线程时才发现自己对多线程的了解少之又少,仅仅停留在lock上面, 故这几天看了下线程参考手册结合自己的心得整理一下放在博客上作为自己的学习笔记。 好了,我们知道“负载”是一个很时尚,很牛X的玩意,往大处说,网站需要负载,数据库需要负载。往小处说,线程也需要负载,面对海量的 用户请求,我们的单线程肯...

dianda6073的专栏 123

多线程 尝试Thread

这几天用到多线程时才发现自己对多线程的了解少之又少,仅仅停留在lock上面, 故这几天看了下线程参考手册结合自己的心得整理一下放在博客上作为自己的学习笔记。 好了,我们知道“负载”是一个很时尚,很牛X的玩意,往大处说,网站需要负载,数据库需要负载。往小处说,线程也需要负载,面对海量的 用户请求,我们的单线程肯定扛不住,那么怎么办,一定要负载,所以说多线程是我们码农必须要熟...

weixin_30699443的博客 60
上一篇: c#中的dataGridView实现enter键自增的功能
下一篇: 多线程-----控件赋值的方法(C#的回调机制)
奇点码农
博客等级 码龄19年 60粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值