c语言多线程和timer区别,C# 多线程之通过Timer开启线程的例子

usingSystem;usingSystem.Threading;/*这是一个关于 timer开启多线程的一个例子

* 1.Timer 的tick事件触发系统内置委托TimerCallback委托。而此委托会触发一个新的线程 。此线程中需要完成的具体的工作写成一个静态方法。作为参数传递给这个委托。

* 2.如果是用Timer触发的线程会自动开始不需要用到.Start()来启动

* 3.如果没有使用线程池threadpool 那么有多少个线程系统都会全部执行 这样的话如果线程太多那就使系统不停地在线程间切换会消耗大量时间。所以说线程太多时一定要

* 用一个线程池来管理 这样就可以提高效率

* 4.虽然timer是在主线程中创建并开始运行的, 但是主线程暂停却并不影响timer的tick事件的按时触发,比如本例中主线程设置睡眠5秒,但是并没有影响timer.tick事件触发

* 5.所有timer创建的线程都是后台线程 即 线程的.isbackground=true;

* 6.用户不创建线程池 系统是不会自己创建的。

* 7.Timer.Change(Timeout.Infinite,Timeout.Infinite) 则是取消Timer的重复性劳动等待下次启用。

* 参数1:Timer每一次触发执行回调前需等待时间,0立即触发,Timeout.Infinite永不触发回调;

* 参数2:表示每次触发timer的间隔时间,0表示只执行一次即第一次。*/

namespaceTimerCreateThread

{classProgram

{static void Main(string[] args)

{

Console.WriteLine("主线程开始执行********************* 线程ID" +Thread.CurrentThread.ManagedThreadId);

TimerCallback delegate_tcb= new TimerCallback(ToDoSamething);//实例化一个可以创建新线程的内置委托--TimerCallback 。具体做的事写成一个静态方法作为参数传入委托。

Timer timer = new Timer(delegate_tcb, null, 3000,2000); //把这个委托作为参数传递进去,timer开启后tick延迟3秒, 之后每2秒执行一次tick()事件,而此事件就会触发TimerCallback委托。一下就要新建一个线程

int j = 0;while (j <3)

{

Console.WriteLine("主线程正在执行********************* 线程ID" +Thread.CurrentThread.ManagedThreadId);

Thread.Sleep(4000); //主线程休眠不会影响tick执行 因为我设置的tick时间为2秒 ,而主线程要睡4秒//证明 虽然timer是在主线程中进行的 但是 主线程暂停却并不影响timer的tick事件的按时触发

j++;

}

timer.Change(Timeout.Infinite, Timeout.Infinite);//完成上面的while循环后执行此句时钟停止。Timer就不再通过tick激发委托创建新线程 时间为4000*3=12秒。此时就不会触发新的线程 但已经触发的线程不会结束 。不管是否正在执行还是正在等待//timer.Dispose();//不建议使用销毁。因为一旦销毁就不能再重启时间触发器

Console.WriteLine("线程池已满,不再开辟新的线程");

Console.ReadKey();

}//具体工作内容写入这个静态方法

static void ToDoSamething(objecti)

{

Thread.CurrentThread.IsBackground= false;

Console.WriteLine("此线程正在执行,线程ID" +Thread.CurrentThread.ManagedThreadId);

Thread.Sleep(10000);//模拟线程执行 需要10秒时间 。Timeout.Infinite无限长

Console.WriteLine("执行完成,线程ID" +Thread.CurrentThread.ManagedThreadId);

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值