`
thinkerAndThinker
  • 浏览: 284663 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

定时器和多线程的区别和联系

 
阅读更多
1 软件定时器
很多同学在工程中喜欢使用软件定时器,因为其使用简单,仅需设置一个时长和其OnTime事件即可使用。确实,软件定时器在某些持续性不强的重复性工作中效率还是不错的,但是也有着很大的缺点。
缺点1,速度:软件定时器的精度比较低,这是由Windows不实时的特性所决定的,在XP下,如果关闭所有能关闭的进程,MFC的软件定时器可以达到接近15ms的精度,而在Win2000下,其能达到接近10ms的精度。但是实际情况是,有些进程是不可以关闭的,比如说数据库服务器,所以MFC的软件定时器能够达到的精度一般情况下在40ms左右,BCB和delphi就更差一点,大概在55ms左右。QueryPerformanceCounter倒是可以大幅提高精度,但是稳定性欠佳。
缺点2,效率:软件定时器其本质实际上是在消息循环中处理WM_TIMER消息,而WM_TIMER消息在消息队列中是一个低级别的消息,所以定时器并不能完全保证处理时间间隔的准确性。另外,Timer占用的是主线程的资源,看似并行实际上是串行,所以窗体的消息队列一旦堵塞,就会造成系统假死或者运行缓慢,这对于UI来说几乎是无法忍受的。
2 多线程
多线程技术是在控制工程中常用的技术,因为在闭环系统中有着大量的数据处理,这些处理显然不可能放在主线程中处理,绝大多数都是在线程中使用。多线程的优点比较明显,就是把费劲的东西扔到后台去,而且对CPU的利用率比较高。如果控制的好,多线程几乎是没有什么缺点的,但实际上控制的好的并不多……原因如下:
1、时间片不可控,抢CPU资源的事情~一般人说不清;
2、同步比较复杂,容易发生死锁,3条线程同步一般就能把人折腾死。同步我比较喜欢用临界区,原因也很简单:因为临界区比较简单……


多个线程是“同时”执行的多个任务;定时可以看作是在本线程内插入的任务。
如果需要多个任务同时执行,就要用多线程;如果需要每隔一段时间做某件事就用定时。多线程相对复杂一些,占用系统资源略多一些,所以如果能不用多线程时尽量不用。
分享到:
评论

相关推荐

    使用多媒体定时器做多线程编程的简单例子

    在IT领域,多线程编程和多媒体定时器是两个关键概念,它们经常被结合使用以实现高效的系统资源管理和任务调度。下面将详细讲解这两个概念及其在实际应用中的使用。 首先,我们来了解一下“多媒体定时器”。多媒体...

    vc定时器和多线程的简单应用

    在VC++编程环境中,"vc定时器和多线程的简单应用" 主要涉及两个核心概念:定时器(Timers)和多线程(Multithreading)。这些技术在开发高效、响应快速的应用程序时非常关键。 定时器是编程中一个重要的工具,用于...

    C#多线程实现定时器

    C#多线程实现定时器 C#多线程实现定时器是指使用C#语言中的多线程编程技术来实现定时器功能。定时器是指在一定的时间间隔内执行某个操作或...使用C#多线程技术可以实现定时器功能,提供了一个灵活和高效的解决方案。

    C++ MFC 定时器、多线程项目

    定时器、创建主线程、子线程

    linux多定时器多线程

    在Linux操作系统中,多线程和多定时器是两种强大的技术,它们被广泛应用于各种复杂的系统和服务中。本文将深入探讨如何在Linux环境下利用多线程和多定时器来实现不同任务的并发执行,以及它们如何协同工作以提高程序...

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

    在项目中,选择合适的定时器类型和多线程策略对于提高应用程序的效率和响应性至关重要。根据具体需求,可能需要结合两者,甚至使用`Quartz.NET`等更强大的任务调度库。 ### 示例项目`TestConsoleApplication` `...

    MFC中利用多线程实现定时器

    在Windows编程环境中,MFC(Microsoft Foundation Classes)库提供了一种高效的方式来构建用户界面和应用程序。...通过不断学习和实践,你可以更好地掌握MFC多线程和定时器的运用,提升你的Windows应用开发技能。

    c#定时器+多线程

    这里我们主要讨论`System.Timers.Timer`,因为它是多线程环境下常用的定时器。 `System.Timers.Timer`类位于`System.Timers`命名空间中,它可以引发一个事件来通知应用程序时间已到。创建一个`Timer`对象并设置其`...

    Spring3.0 mvc 定时器及多线程任务demo

    在Spring 3.0 MVC框架中,定时器和多线程任务是两个关键概念,用于构建高效、自动化的Web应用程序。下面将详细讲解这两个概念及其在实际应用中的使用。 一、Spring 3.0 MVC定时器 在Spring 3.0中,我们可以使用...

    VC多线程和定时器 实例

    【VC多线程和定时器 实例】 在Windows编程中,Visual C++(简称VC)是一种常用的开发环境,用于创建高性能的应用程序。本实例将深入探讨如何在VC中使用多线程技术和定时器来实现更复杂的系统功能。多线程允许程序...

    C++ 定时器 线程的使用

    在C++编程中,定时器和线程是两个重要的概念,它们在开发高效、实时...通过实践和学习,你可以构建出高效、灵活的多线程定时任务系统。压缩包中的“dingshiqi”文件可能是这个示例项目的源代码,可以进一步研究和学习。

    python多线程定时器

    在Python编程中,多线程和定时器是两个非常重要的概念。多线程允许程序同时执行多个任务,而定时器则能确保程序在特定时间点或以特定间隔执行某些操作。这里我们将深入探讨如何利用Python的`threading`模块来实现多...

    基于QT的多线程定时器

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

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

    在计算机编程领域,多线程和异步定时器是两个重要的概念,特别是在开发高效、响应迅速的应用程序时。本CVI(Cooperative Vision Interface)学习文件着重探讨了如何在CVI环境中利用多线程和异步定时器来优化程序性能...

    定时器与多线程任务调度器使用

    定时器与多线程任务调度器使用定时器与多线程任务调度器使用

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

    在IT领域,多线程定时器是一个非常实用的工具,特别是在开发Web应用程序和Windows桌面应用(Winform)时。这个工具允许程序员在多个线程环境中设置定时任务,从而实现后台处理、定期检查更新或者执行一系列间隔操作...

    fzTThreadTimer_delphi定时器_delphi_线程定时器_

    4. **启动与停止**:线程定时器通常有启动和停止方法,用于控制定时任务的开始和结束。正确管理和同步这些操作以防止资源泄漏或不必要的计算非常重要。 5. **精度与延迟**:线程定时器相比消息驱动的定时器,可能在...

    linux 多线程安全定时器

    `timerfd`和`epoll`是两种常见的机制,它们在处理多线程安全定时器方面各自扮演着重要角色。 `timerfd`是Linux内核2.6.28版本引入的一种新型定时器接口,它提供了一种通过文件描述符来通知定时器到期事件的方式。...

    c++与Qt实现把定时器放进子线程中运行

    标题和描述所提到的是如何将QTimer对象放置到子线程中运行,以实现定时器槽函数与QTimer在同一子线程内执行,避免影响主线程的性能。 QTimer是Qt提供的一种计时器类,它可以用来定期触发一个信号,这个信号可以连接...

    VC2003多线程定时器

    多线程定时器允许程序在多个独立的线程中同时运行,而定时器则可以定期触发特定的事件或任务,这对于实时系统和需要定期检查或执行操作的应用程序来说是必不可少的。 首先,我们需要理解多线程的基本概念。在单线程...

Global site tag (gtag.js) - Google Analytics