`
free_bird816
  • 浏览: 209065 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

多线程的自动管理(定时器)

阅读更多

Timer类:设置一个定时器,定时执行用户指定的函数。
              定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。

初始化一个Timer对象:
Timer timer = new Timer(timerDelegate, s,1000, 1000);

// 第一个参数:指定了TimerCallback 委托,表示要执行的方法;
// 第二个参数:一个包含回调方法要使用的信息的对象,或者为空引用;

// 第三个参数:延迟时间——计时开始的时刻距现在的时间,单位是毫秒,指定为“0”表示立即启动计时器;
// 第四个参数:定时器的时间间隔——计时开始以后,每隔这么长的一段时间,TimerCallback所代表的方法将被调用一次,单位也是毫秒。指定 Timeout.Infinite 可以禁用定期终止。

Timer.Change()方法:修改定时器的设置。(这是一个参数类型重载的方法)
使用示例:  timer.Change(1000,2000);

Timer类的程序示例(来源:MSDN):

using System;
using System.Threading;

namespace ThreadExample
{
    
class TimerExampleState 
    {
      
public int counter = 0;
      
public Timer tmr;
    }

    
class App 
    {
      
public static void Main()
      {
          TimerExampleState s 
= new TimerExampleState();

          
//创建代理对象TimerCallback,该代理将被定时调用
          TimerCallback timerDelegate = new TimerCallback(CheckStatus);

            
//创建一个时间间隔为1s的定时器
            Timer timer = new Timer(timerDelegate, s,10001000);
            s.tmr 
= timer;

            
//主线程停下来等待Timer对象的终止
            while(s.tmr != null)
            Thread.Sleep(
0);
            Console.WriteLine(
"Timer example done.");
            Console.ReadLine();
      }

      
//下面是被定时调用的方法
      static void CheckStatus(Object state)
      {
            TimerExampleState s 
=(TimerExampleState)state;
            s.counter
++;
            Console.WriteLine(
"{0} Checking Status {1}.",DateTime.Now.TimeOfDay, s.counter);

            
if(s.counter == 5)
            {
                
//使用Change方法改变了时间间隔
                (s.tmr).Change(10000,2000);
                Console.WriteLine(
"changed");
            }

            
if(s.counter == 10)
            {
                Console.WriteLine(
"disposing of timer");
                s.tmr.Dispose();
                s.tmr 
= null;
            }
      }
    }
}

 

 

  程序首先创建了一个定时器,它将在创建1秒之后开始每隔1秒调用一次CheckStatus()方法,当调用5次以后,在CheckStatus()方法中修改了时间间隔为2秒,并且指定在10秒后重新开始。当计数达到10次,调用Timer.Dispose()方法删除了timer对象,主线程于是跳出循环,终止程序

分享到:
评论

相关推荐

    多线程的自动管理(定时器)_C#

    多线程的自动管理(定时器)_C#多线程的自动管理(定时器)_C#

    CVI学习文件-多线程 异步定时器(修改增加学习版)

    在多线程环境下,异步定时器尤其有用,因为它可以在线程等待或执行其他任务时,在后台自动执行任务。CVI中的异步定时器可能使用了底层操作系统提供的API,如Windows的SetTimer函数或POSIX的alarm函数。设置定时器后...

    基于QT的多线程定时器

    在基于QT的多线程定时器项目中,我们主要探讨的是如何在QT环境中利用多线程和定时器功能来实现特定的程序逻辑。 1. **QT中的线程(QThread)** 在QT中,`QThread`类是处理线程的基础。通过继承`QThread`,我们可以...

    linux 多线程安全定时器

    在Linux系统中,多线程编程常常涉及到时间管理和同步,以确保程序的高效与正确运行。`timerfd`和`epoll`是两种常见的机制,它们在处理多线程安全定时器方面各自扮演着重要角色。 `timerfd`是Linux内核2.6.28版本...

    C# .net 定时器,多线程实现定时器

    这意味着它不自动管理线程同步,开发者需要自己处理可能的并发问题。创建`System.Threading.Timer`的方法如下: ```csharp TimerCallback callback = (_) => Console.WriteLine("Timer triggered"); System....

    多线程定时器Web和Winform双版本

    - Web版本的多线程定时器常用于服务器端的定时任务,如自动备份数据库、定时发送邮件、执行报表生成等。 - Winform版本的多线程定时器可用于桌面应用的实时监控、定时提醒、后台数据同步等功能。 6. **文件列表中...

    QT在子线程中调用定时器

    QT框架是C++中广泛使用的跨平台应用开发库,它提供了丰富的功能,包括GUI、网络、数据库连接等。在QT中,线程是处理并发任务的重要...理解这些要点后,你就可以在多线程环境中灵活地利用定时器来实现复杂的定时任务。

    安卓拍照上传录像监控录屏相关-包含后台线程自动摄像定时器到时间自动保存3gp文件。正常摄像.rar

    本压缩包文件"安卓拍照上传录像监控录屏相关-包含后台线程自动摄像定时器到时间自动保存3gp文件。正常摄像.rar"似乎提供了一个实现这些功能的示例,主要关注后台自动摄像和定时保存3gp视频文件的技术实现。 首先,...

    用线程实现的定时器Timer

    然而,线程定时器也需要注意线程安全问题,确保在多线程环境下对共享资源的操作是同步的。此外,由于使用了额外的线程,需要考虑线程管理和资源消耗。 总的来说,基于线程事件驱动的定时器是Windows编程中一种强大...

    VC6 线程+定时器应用程序源码

    在本文中,我们将深入探讨如何在Microsoft Visual ...通过理解和实践这些知识点,开发者可以在VC6环境中构建高效、稳定的多线程应用,同时利用定时器来实现定期的任务调度和触发。这有助于提高软件的性能和用户体验。

    DELPHI7 线程自动刷新

    "DELPHI7 线程自动刷新"这个主题涉及到的是如何在Delphi 7中使用线程来实现数据或界面的自动更新,以提高程序的响应性和用户体验。 在Delphi 7中,创建线程通常是通过继承自TThread类来完成的。TThread是VCL...

    C#多线程学习之(五)使用定时器进行多线程的自动管理

    本篇文章将深入探讨如何使用C#中的Timer类来实现多线程的自动管理。 Timer类是.NET框架提供的一个强大工具,它可以用来定期执行某个任务。在C#中,Timer类位于System.Threading命名空间下,它允许我们指定一个回调...

    vs2005控件学习(含画图、多线程、定时器等)

    本篇主要聚焦于VS2005中的控件学习,特别是关于画图、多线程和定时器的应用。 首先,我们来看看VS2005中的控件。控件是用户界面(UI)的基础元素,它们允许用户与应用程序进行交互。VS2005提供了各种预定义的控件,...

    .NET Framework中定时器timer的单线程与多线程使用讲解

    在使用多线程定时器时,了解.NET框架提供的线程管理工具,比如线程池和线程同步机制,是实现稳定多线程应用的关键。在设计时还需要考虑异常处理和资源清理策略,以确保应用程序的健壮性和响应性。

    Arduino 使用多线程例子

    多线程在Arduino上的实现还有其他策略,如使用Firmata库配合计算机上的软件实现远程控制,或者使用如TaskScheduler、FastInterrupt等第三方库来管理任务队列,它们可以模拟并发执行的效果。 在压缩包文件“PT_MOTOR...

    OC多线程管理

    GCD自动管理线程池,提高系统效率。 3. NSOperationQueue:基于GCD的更高层次抽象,提供更灵活的控制,如任务依赖、最大并发数量等。 三、NSThread 1. 创建线程:可以通过`NSThread`类的`detachNewThreadSelector:...

    QT中sqlite多线程操作4个注意问题

    多线程环境下进行SQLite数据库操作时,必须特别注意数据库连接的管理和同步控制,以避免出现死锁和其他并发问题。通过独立加载数据库驱动、适当加锁、及时关闭数据库以及合理管理`QsqlQuery`变量的作用域等方式,...

    定时器管理类

    4. **线程安全**:在多线程环境下,定时器管理类需要考虑线程安全问题,确保在并发访问时数据的一致性。 5. **可扩展性**:设计时应考虑到未来可能增加的定时任务类型,提供灵活的接口供用户注册和取消定时任务。 ...

    多线程编程指南

    一个更好的做法是让系统自动管理线程,如使用GCD时,你只需提交任务,然后由GCD负责分配线程。同时,保持线程合理的忙碌,避免阻塞线程,以及确保线程在退出时能够正确清理资源,是重要的设计技巧。 线程成本主要...

Global site tag (gtag.js) - Google Analytics