python线程的暂停与继续_线程暂停与继续实现
C#线程暂停与继续解决方案
昨天, 老师要我们每个人交一个关于黑客方面的程序,想了半天发现端口扫描工具好像好写点,从昨天写到今天基本快完成了,给大家看下效果,不要笑话我哦哦(~~)
图1 端口扫描器
这个程序里面有一些地方不太满意,就是扫描的暂停与继续实现时,使用的是Thread.Suspend和Thread.Resume而这两个方法,在VS2010里提示已经过时,不建议使用,在网上查阅了一些资料,发现有个事件通知的方法很好,事件通知的大致原理是,线程在执行过程中暂停,等到其他线程通知时才继续执行下去,这样的确是可以起到暂停与继续的效果。但是,这种暂停是被动的,我需要的是主动暂停,即点下按钮,线程暂停,再点下按钮,线程继续执行。
最终,我想了一种比较另类的方法,大致思路如下:还是采用事件通知的方式,在线程中等待通知,直到来通知了才继续执行,而主线程(窗体线程)中使用一个计时器System.Windows.Forms.Timer 来不停的通知线程,如果计时器间隔时间设置的足够小,基本上看不出停顿。此时,程序的暂停与继续实现就很简单了,相信大家已经想到了,只要在通过控制计时器的Stop()和Start()就可控制线程的暂停与继续了。
下面是一个下的demo:
运行截图:
图2 demo运行效果
C#源代码:
usingSystem;
usingSystem.Windows.Forms;
usingSystem.Threading;
namespace线程暂停与继续实现
{
publicpartialclassForm1 : Form
{
//计时器
privateSystem.Windows.Forms.Timer tm =newSystem.Windows.Forms.Timer();
//自动重置事件类
//主要用到其两个方法 WaitOne() 和 Set() , 前者阻塞当前线程,后者通知阻塞线程继续往下执行
AutoResetEvent autoEvent = newAutoResetEvent(false);
publicForm1()
{
InitializeComponent();
ProgressBar.CheckForIllegalCrossThreadCalls = false;
tm.Interval = 1;
tm.Tick += newEventHandler(tm_Tick);
}
//计时器 事件
voidtm_Tick(objectsender, EventArgs e)
{
autoEvent.Set(); //通知阻塞的线程继续执行
}
//启动
privatevoidbtnStart_Click(objectsender, EventArgs e)
{
tm.Start();
Thread t = newThread(DoWork);
t.Start();
}
//在线程中执行的方法
privatevoidDoWork()
{
while(progressBar1.Value < progressBar1.Maximum)
{
progressBar1.PerformStep();
autoEvent.WaitOne(); //阻塞当前线程,等待通知以继续执行
}
}
//暂停
privatevoidbtnSuspend_Click(objectsender, EventArgs e)
{
tm.Stop();
}
//继续
privatevoidbtnResume_Click(objectsender, EventArgs e)
{
tm.Start();
}
}
}
python线程的暂停与继续_线程暂停与继续实现相关推荐
- python在主线程上下文执行_线程进程系列*(Python)
一 ,线程的两种调用方式 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而threading 模块通过对thread进行二次封装, 提供了更 ...
- java 线程的创建和执行_线程管理(一)线程的创建和运行
声明:本文是< Java 7 Concurrency Cookbook>的第一章, 作者: Javier Fernández González 译者:郑玉婷 校对:欧振聪 线程的创建和运行 ...
- Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)
文章目录 1.线程的定义,进程和线程的关系 2.Linux下的线程 Linux原生线程库(pthread库pthread.h) 线程的优点 线程的私有数据 3.线程控制 ①创建线程(pthread_c ...
- java线程暂停和继续_线程暂停和恢复
一个线程,在无限的循环,当有数据的时候就会被处理掉,但是如果暂时还没有数据,我们也会迭代判断有没有数据.这样就造成了浪费.我们可以让没有数据的时候暂停这个线程,当有数据进来的时候再通知线程运行,如果线 ...
- java 线程安全的单例_线程安全的单例模式的几种实现
单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数:有利于java GC回收机制. 单例模式的三个好处: 1.控制资源的使用,通过线程同步来控制资源的并发访问 2.控制实例的产生个数,来达 ...
- python强制暂停线程_如何暂停线程(python)
上下文: 我正在用Qt creator和python中的"behavior"文件构建一个图形界面.我的GUI的测试版本是: 预期行为: 我正在运行两个不同的线程,它们被引用到同一个 ...
- python qthread 线程退出_线程:概念和实现
翻译:老齐 译者注:与本文相关图书推荐:<Python大学实用教程><跟老齐学Python:轻松入门> ★ 本文将分两部分刊发. " 第一部分 Python线程允许程 ...
- python线程安全_线程,线程安全与python的GIL锁
在看的过程中,接触到一个名词,一个从学python开始就一直看到,但是从来都是一知半解的名词,心里不开心,必须把它搞明白,对了,这个词就是 GIL.网上搜索了一些资料,粗浅的理解了什么是GIL,自己感 ...
- 线程中这么调用类_一文学会 Python 多线程编程
Threading 模块从Python 1.5.2版开始出现,用于增强底层的多线程模块 thread .Threading 模块让操作多线程变得更简单,并且支持程序同时运行多个操作. 注意,Pytho ...
最新文章
- Java中图形界面重绘方法
- SpringBoot+Vue实现请求后台获取Base64编码的图片验证码并使用Redis缓存实现2分钟内有效
- bnu 4067 美丽的花环
- 从循环引用谈依赖倒置原则
- 【校招面试 之 C/C++】第12题 C++ 重载、重写和重定义
- sqlserver获得到当前游标中存在的数据行数
- android 线程太多,应用程序可能在其主线程上做了太多的工作。
- 图片服务 - thumbor自定义检测
- numpy where
- @广州开发者,华为送来一份说明书——助你轻松应对开发难题
- ngram模型中文语料实验step by step(3)-ngram模型的光滑处理
- NO5 grep-head-tail命令
- C/c++输入输出函数
- 05.日志框架与Spring Boot日志全篇
- pdf复制文字时对于回车的处理
- 嵌入式linux应用开发之常用shell脚本总结
- 计算机与机械制图课题研究,考核机械制图论文,关于“机械制图CAD”课程考试改革相关参考文献资料-免费论文范文...
- 快速获取InputBox选中区域的单个单元格引用地址
- mysql建库图解_数据库 MySQL安装图解
- 小程序中新版本的获取用户头像与昵称:bind:chooseavatar
热门文章
- kmplayer 调左右声道
- Reset your Rearm count, run Windows 7 Forever without cracks
- html中留言表怎么写,html 留言板:
- 李东生增持TCL集团191万股份 占总股本0.02%
- CSS 手写加号和减号
- linux开机直接进入win,安装ubuntu之后直接进入windows系统的一种原因
- win10/win11开机自动连接指定WiFi - 任务计划运行bat脚本
- cineam 4d 影视特效制作-多米诺骨牌效应动画
- PTA-测试-Java-5-1 厘米换算英尺英寸 (15分)
- 51单片机测电压,QT串口接收,并用数码管显示,十六进制转十进制