社区
C#
帖子详情
线程计时工作,挂起时如何确保从头执行。
cs1438250
2016-01-19 02:33:30
winform窗口初始化的时候,start后台线程T。
T里有很多方法要执行
方法1
方法2
方法3
……
方法20 假如是20个。
有一个button,点击的时候,要把T挂起,但是如何保障挂起的时候,方法20执行完毕,而不是执行到方法6或者其他就挂起。
恢复线程时,希望从方法1开始执行,而不是接着方法7开始执行。
...全文
216
12
打赏
收藏
线程计时工作,挂起时如何确保从头执行。
winform窗口初始化的时候,start后台线程T。 T里有很多方法要执行 方法1 方法2 方法3 …… 方法20 假如是20个。 有一个button,点击的时候,要把T挂起,但是如何保障挂起的时候,方法20执行完毕,而不是执行到方法6或者其他就挂起。 恢复线程时,希望从方法1开始执行,而不是接着方法7开始执行。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
暂7师师长常乃超
2016-11-03
打赏
举报
回复
看了大家的讨论,学习了。
一条牛
2016-07-15
打赏
举报
回复
stop()方法作为一种粗暴的线程终止行为,在线程终止之前没有对其做任何的清除操作,因此具有固有的不安全性。 用Thread.stop()方法来终止线程将会释放该线程对象已经锁定的所有监视器。如果以前受这些监视器保护的任何对象都处于不连贯状态,那么损坏的对象对其他线程可见,这有可能导致不安全的操作。 由于上述原因,因此不应该使用stop()方法,而应该在自己的Thread类中置入一个标志,用于控制目标线程是活动还是停止。如果该标志指示它要停止运行,可使其结束run()方法。如果目标线程等待很长时间,则应使用interrupt()方法来中断该等待。 suspend()方法 该方法已经遭到反对,因为它具有固有的死锁倾向。调用suspend()方法的时候,目标线程会停下来。如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,则在目标线程重新开始以前,其他线程都不能访问该资源。除非被挂起的线程恢复运行。对任何其他线程来说,如果想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。由于上述原因,因此不应该使用suspend()方法,而应在自己的thread类中置入一个标志,用于控制线程是活动还是挂起。如果标志指出线程应该挂起,那么用wait()方法命令其进入等待状态。如果标志指出线程应当恢复,那么用notify()方法重新启动线程。
一条牛
2016-07-15
打赏
举报
回复
我不是需要的事多少秒执行一次,而是我有很多任务,(比如说我有1万个文件需要下载,如果不使用线程?我是不是需要一个个下,一个个任务去执行,如果我使用线程?那就是我开20个线程,就是20个线程同时下载?)
cs1438250
2016-01-19
打赏
举报
回复
引用 8 楼 johnliuyuan 的回复:
是啊,20个方法都执行完,线程不久该结束了吗?何来挂起之说啊
20个方法要循环执行,每10秒执行一次,上面简写了。 我还能不知道循环完事线程结束么。
john_QQ:2335298917
2016-01-19
打赏
举报
回复
是啊,20个方法都执行完,线程不久该结束了吗?何来挂起之说啊
cs1438250
2016-01-19
打赏
举报
回复
线程里肯定有 循环的,while(Flag) 也有Thread.Sleep(xxxx); 因为工作时间比较长,可能一两个月不关机,所以不想用timer。 假定10秒执行一次,也是Thread.Sleep(10000); 方法1-20是向多个表里存数据,所以用后台线程。 换个问法,点按钮挂起这个线程的时候,本次while(Flag)是否执行完才挂起。
以专业开发人员为伍
2016-01-19
打赏
举报
回复
“挂起”的原因,十有八九是 UI 窗体响应用户操作的体验太卡了。 而一个交互程序(而非明确知道的挂机耗资源的程序)还要弄20个“后台”线程一直在那里死循环者,反过来又说明再设计时有滥用线程的习惯。
以专业开发人员为伍
2016-01-19
打赏
举报
回复
看上去很花哨的所谓“多线程、定时工作”,这个习惯,从一开始就要把人家原本执行性能有保障的项目产品这一锅鲜汤里边,放上性能的老鼠屎了。
以专业开发人员为伍
2016-01-19
打赏
举报
回复
首先,交互式系统的编程以事件驱动机制(这是具体的技术,以及各种组件中有几十万、上百万个现成的实现,几乎每一种组件的每一个实例都会抛出多个事件)为出发点,不是你随便整一堆线程去“监控”所谓事件。 其此,线程要执行的过程,通常几十毫秒就结束了。如果你纠结“死循环”的编程思路,那么结合你滥用线程(windows下每一个线程都至少占用1M内存栈空间,占用CPU调度时间),将会形成恶性循环,你需要要更多诡异和蹩脚的代码来“控制”你的“监控”的后果。 每当需要线程(系统线程池分配)时,就是几十毫秒的事情要干一下,然后就结束了。哪有什么循环?
娃都会打酱油了
2016-01-19
打赏
举报
回复
1~20全部都要执行完,那你哪有挂起的概念?
Poopaye
2016-01-19
打赏
举报
回复
那你根本不需要挂起和恢复 线程执行完毕会自动退出 下次重启新线程
xdashewan
2016-01-19
打赏
举报
回复
按钮控制一个标志位,线程每次执行1-20方法,执行完了判一下标志位是否要重来再来一次,是就再来。原理很简单,但写起来优劣差别很大,简单但比较差的做法是循环,写的好点可以利用thread.timer,当然还有很多别的方式,我也懒得一个个去想了
用
线程
实现C#中的倒
计
时
本文介绍了在C#中实现倒
计
时
的两种方法:一是利用普通Timer控件,简单易行;二是通过进程控制,详细讲解了后台代码实现。同
时
,概述了Thread类的常用方法,包括
挂起
、恢复、终止和
线程
间操作。在选择倒
计
时
实现方式
时
,根据精度需求,毫秒级推荐使用
线程
,秒级则可采用Timer控件。
python
计
时
器模块_python中
计
时
器
本文围绕Python
计
时
器展开,介绍了使用timeit模块
计
时
、通用
计
时
装饰器的实现,还提及Python 2和3中不同的
计
时
函数。同
时
探讨了在使用
计
时
器
时
遇到的问题,如
线程
启动错误等,此外还涉及Python的装饰器、生成器等相关知识。
Kotlin 协程 -
挂起
函数 Suspend Function
本文深入解析Kotlin协程中
挂起
函数的核心机制,包括
挂起
与恢复过程、非阻塞特性、suspend关键字的编译转换、Continuation续体接口及其实现类、有限状态机(FSM)在协程中的建模方式(含红绿灯类比)、标签驱动的状态跳转逻辑,以及自定义
挂起
函数的两种实现路径(封装与回调改造)。重点阐述
挂起
函数如何通过状态机+Continuation实现
线程
无阻塞切换与上下文保存。
预防Windows应用程序
挂起
本文详细阐述了如何预防Windows应用程序
挂起
的问题,包括
挂起
的原因、操作系统视角的
挂起
过程、开发者角度的应对策略,以及提供了最佳实践和常见错误避免指南。
kcaptcha php验证码,在后台
执行
短信验证码倒
计
时
本文介绍了一种在iOS应用中实现短信验证码倒
计
时
的方法,即使应用被置于后台也能正常
工作
。通过使用Dispatch Source和NSTimer,结合申请后台
执行
时
间,
确保
了倒
计
时
的准确性与流畅性。
C#
111,129
社区成员
642,533
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章