请教线程执行时间与频率问题

ttitt147 2016-03-08 10:40:34
我现在有一线程,该线程本身执行时间有时会大于100毫秒,如果我将此线程的执行频率设定为50毫秒,想了解该线程是如何执行的,会不会产生某一大于100毫秒线程中的执行未完成系统还会启动一个新的线程
...全文
450 17 打赏 收藏 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
socg 2016-03-09
  • 打赏
  • 举报
回复
这个叫线程定时器!!!! 你提的问题做个很点单是实验就解决了,何必提问这么麻烦
qbilbo 2016-03-08
  • 打赏
  • 举报
回复
引用 5 楼 ttitt147 的回复:
MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, 50); 如果ScanAndSortThread本身有时执行超过50毫秒,会不会某一时间有两个ScanAndSortThread在执行?
构造函数最后一个参数为-1时,定时器只会执行1次。 MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, -1); 线程函数最后加上 MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 50, -1); 这样就能保证不会同时有2个ScanAndSortThread运行了。
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 9 楼 qbilbo 的回复:
[quote=引用 5 楼 ttitt147 的回复:] MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, 50); 如果ScanAndSortThread本身有时执行超过50毫秒,会不会某一时间有两个ScanAndSortThread在执行?
构造函数最后一个参数为-1时,定时器只会执行1次。 MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, -1); 线程函数最后加上 MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 50, -1); 这样就能保证不会同时有2个ScanAndSortThread运行了。[/quote] 谢谢
xdashewan 2016-03-08
  • 打赏
  • 举报
回复
引用 5 楼 ttitt147 的回复:
MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, 50); 如果ScanAndSortThread本身有时执行超过50毫秒,会不会某一时间有两个ScanAndSortThread在执行?
会,如果要用定时器,那么你需要动态计算定时器的触发时间
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 4 楼 xdashewan 的回复:
[quote=引用 3 楼 ttitt147 的回复:] 请问如果需要等待,该如何处理
可以使用ThreadPool,参照http://www.cnblogs.com/SkySoot/archive/2012/04/01/2429259.html[/quote] 如果是如下形式 MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, 50); 请问如果ScanAndSortThread本身有时执行超过50毫秒,会不会某一时间有两个ScanAndSortThread在执行?
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 4 楼 xdashewan 的回复:
[quote=引用 3 楼 ttitt147 的回复:] 请问如果需要等待,该如何处理
可以使用ThreadPool,参照http://www.cnblogs.com/SkySoot/archive/2012/04/01/2429259.html[/quote] 感谢
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, 50); 如果ScanAndSortThread本身有时执行超过50毫秒,会不会某一时间有两个ScanAndSortThread在执行?
xdashewan 2016-03-08
  • 打赏
  • 举报
回复
引用 3 楼 ttitt147 的回复:
请问如果需要等待,该如何处理
可以使用ThreadPool,参照http://www.cnblogs.com/SkySoot/archive/2012/04/01/2429259.html
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
是否等待还是启动新线程,这取决于你的代码是如何写的
请问如果需要等待,该如何处理
xdashewan 2016-03-08
  • 打赏
  • 举报
回复
是否等待还是启动新线程,这取决于你的代码是如何写的
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
是否等待还是启动新线程,这取决于你的代码是如何写的
也就是说该线程中须要在首尾处使用block和unblock是么?
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
System.Threading.Timer 对象实例,要临时停止定时,使用 change 方法;要启用它,也是使用 change 方法。不是重新创建对象 Timer 类型实例。
多谢 实例:MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, 50); void ThreadFunction() { 线程函数头临时停止:MotionTim.change(-1, 50); . 线程函数 . 线程函数尾重新启用:MotionTim.change(0, 50); } 这样可以么?
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
System.Threading.Timer 对象实例,要临时停止定时,使用 change 方法;要启用它,也是使用 change 方法。不是重新创建对象 Timer 类型实例。
多谢 实例:MotionTim = new System.Threading.Timer(new TimerCallback(ScanAndSortThread), null, 0, 50); void ThreadFunction() { 线程函数头临时停止:MotionTim.change((new TimeSpan(-1), new TimeSpan(0, 0, 0, 50)); . 线程函数 . 线程函数尾重新启用:MotionTim.change((new TimeSpan(0), new TimeSpan(0, 0, 0, 50)); } 这样可以么?
  • 打赏
  • 举报
回复
System.Threading.Timer 对象实例,要临时停止定时,使用 change 方法;要启用它,也是使用 change 方法。不是重新创建对象 Timer 类型实例。
ttitt147 2016-03-08
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
[quote=引用 3 楼 ttitt147 的回复:] [quote=引用 1 楼 xdashewan 的回复:] 是否等待还是启动新线程,这取决于你的代码是如何写的
请问如果需要等待,该如何处理[/quote] 这就谈不上“线程等待”,而是你的前一个方法执行开始的时候应该关闭定时器,然后方法执行到最后的时候才启动定时器。 不要滥用线程这个概念,要按照常规的、基础的方式考虑程序设计问题。[/quote] 谢谢
  • 打赏
  • 举报
回复
引用 楼主 ttitt147 的回复:
我现在有一线程,该线程本身执行时间有时会大于100毫秒,如果我将此线程的执行频率设定为50毫秒,想了解该线程是如何执行的,会不会产生某一大于100毫秒线程中的执行未完成系统还会启动一个新的线程
看不懂。什么叫做“线程执行频率”?线程中你去执行一个方法,假设两个线程同时都在执行同一个方法,那么就是同一个方法的两个执行实例在并发着。这很“正常”,不应该奇怪。
  • 打赏
  • 举报
回复
引用 3 楼 ttitt147 的回复:
[quote=引用 1 楼 xdashewan 的回复:] 是否等待还是启动新线程,这取决于你的代码是如何写的
请问如果需要等待,该如何处理[/quote] 这就谈不上“线程等待”,而是你的前一个方法执行开始的时候应该关闭定时器,然后方法执行到最后的时候才启动定时器。 不要滥用线程这个概念,要按照常规的、基础的方式考虑程序设计问题。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧