BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3935同步于 2012/10/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

任务放到一个独立线程中另一个线程负责计时控制,到时杀线程

wzl2011
2012/10/23镜像同步7 回复
请问在一个循环中定时执行某段代码若时间没到代码执行完则结束,若时间到了代码则终止 for(i=0;i<循环的次数;i++) { this.Timer.Interval=100; this.timer.enabled; 或者this.timer.start();//? if(timer定时没到&&没有接收到数据) { 继续接收数据 } if(timer定时到&&没有接收到数据) { 停止时间 停止接收数据 } if(接收到数据) { 停止时间 处理数据 } } 但是时间到没到怎么判断? timer_tick()可以吗?还是Timer.Elapsed?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
Kazuki机器人#1 · 2012/10/23
Module Module1 Sub Main() For i As Integer = 0 To 3 Dim t As New Threading.Thread(AddressOf doWork) t.Start(i) t.Join(100) t.Abort() Next Console.ReadLine() End Sub Sub doWork(e As Object) Select Case DirectCast(e, Integer) Case 0 Console.WriteLine(Now.ToString("HH:mm:ss.fff") + "ends immediately") Case 1 Console.WriteLine(Now.ToString("HH:mm:ss.fff") + "start and sleep 200ms") Threading.Thread.Sleep(200) Console.WriteLine(Now.ToString("HH:mm:ss.fff") + "this won't be displayed") Case 2 Console.WriteLine(Now.ToString("HH:mm:ss.fff") + "ends immediately") End Select End Sub End Module 我想到的最简单的办法是用Thread.Join。。。但是计时在ms级别就没那么精确了
wzl2011机器人#2 · 2012/10/23
【 在 Kazuki 的大作中提到: 】 : Module Module1 : Sub Main() : For i As Integer = 0 To 3 : ................... 请问这是C#语言吗 我有点看不懂嗯
duvet机器人#3 · 2012/10/24
这是VB.net,VB.net和C#在CLR层面是一样的,语法稍有不同,C#我不太会写,你可以看看这个: http://msdn.microsoft.com/zh-cn/library/6b1kkss0.aspx 【 在 wzl2011 的大作中提到: 】 : 请问这是C#语言吗 我有点看不懂嗯
Kazuki机器人#4 · 2012/10/24
上错号了,这个是我说的 【 在 duvet 的大作中提到: 】 : 这是VB.net,VB.net和C#在CLR层面是一样的,语法稍有不同,C#我不太会写,你可以看看这个: : http://msdn.microsoft.com/zh-cn/library/6b1kkss0.aspx
wzl2011机器人#5 · 2012/10/24
【 在 Kazuki 的大作中提到: 】 : 上错号了,这个是我说的 谢谢,有一定的帮助!
tonyjansan机器人#6 · 2012/10/24
纯粹转译,向LSS致敬~ using System; using System.Threading; namespace Module { class Program { private static int index = 0; static void Main(string[] args) { for(index = 0; index < 3; index++){ Thread t = new Thread(doWork); t.Start(); t.Join(100); t.Abort(); } } static void doWork(){ switch(index) { case 0: Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "ends immediately"); break; case 1: Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "start and sleep 200ms"); Thread.Sleep(200); Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "this won't be displayed"); break; case 2: Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "ends immediately"); break; } } } } 【 在 Kazuki 的大作中提到: 】 : Module Module1 : Sub Main() : For i As Integer = 0 To 3 : ...................
wqchen机器人#7 · 2012/10/24
假设hThread1是要监视的线程,在thread 2中: result = waitforsingleobject(hThread1, 时间); if( result == time_out 或者是 getlasterror() == time_out ) teninate_thread(hThread1)