`
yangyou230
  • 浏览: 1649340 次
文章分类
社区版块
存档分类

vc中定时器并非多线程

 
阅读更多

<wbr><wbr><wbr><wbr>VC++中timer很容易给人感觉是多线程的。其实不然,他是通过消息触发事件的。通过SetTimer函数设定定时器后,在规定时间内向消息队列中加入wm_timer消息来触发事件。并且只有该消息返回后才处理下个消息。</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr>可以通过程序来验证。</wbr></wbr></wbr>

BOOL bThreadEnd = TRUE;

UINT ThreadPro(LPVOID pParam);

void CTestThreadDlg::OnTimer(UINT nIDEvent)
{
<wbr>// TODO: Add your message handler code here and/or call default<br><wbr>//死循环。。这时候窗口不会响应事件。<br><wbr><br><wbr>int a =1;<br><wbr>if (bThreadEnd)//全局变量确保线程只创建一个<br><wbr>{<br><wbr><wbr>pMyThread = AfxBeginThread(ThreadPro, (LPVOID)&amp;a);//创建线程<br><wbr><wbr>bThreadEnd = false;<br><wbr>}<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>CDialog::OnTimer(nIDEvent);<br> }</wbr>

<wbr></wbr>

UINT ThreadPro(LPVOID pParam) //线程事件函数
{
<wbr>while (1)<br><wbr>{<br><wbr>}<br><br><wbr>bThreadEnd = true;<br><wbr>return 1;<br> }</wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

以上程序,用timer的死循环和线程事件函数的死循环对比可知。。timer并非多线程的。。。


OnTimer实现了若干段程序的并行运行。

对于单CPU来说,是不可能实现程序段的并行运行的,只能是交替运行。其实它与其他的消息没有什么大的区别,只不过此消息的入队是循环的。

不知道小弟说的对不对,望大侠指点!

分享到:
评论

相关推荐

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

    vc定时器和多线程的简单应用,多线程的执行效率好象更高~~~

    VC多线程和定时器 实例

    通过简单例子实现多线程,把界面和数据计算分开,又在其中运用定时器

    VC2003多线程定时器

    利用VC,net2003开发的多线程定时器

    VC中TIMER与多线程的对比.zip

    visual c++ VC中TIMER与多线程的对比.zip TIMER与线程的对比:用TIMER就显慢,因为TIMER是在主线程中的,即共用一线程,用多线程就快多了

    VC开发的定时器

    VC开发的定时器,喜欢的可以看看。比较简陋

    基于VC_的实时数据采集系统中定时器的使用与比较

    0 的环境下的数据采集系统中采用 WM_TIMER定时器和多媒体定时器完成多点实时数据采集 ,比较 2 种软件定时器在实现方法、 优先级、 定时精度等方面的差别 ,通过比较得到:在多线程、 多任务的数据采集系统或采样周期...

    VC定时器事件,很简单的实例

    初学者很实用,高手就不要看啦 VC写的,响应定时器事件,还有其他多线程的,敬请期待哦

    VC多线程编程

    好东西 讲解VC多线程编程的 还附带定时器相关资料

    用线程实现的定时器Timer

    用vc实现的基于线程的定时器Timer,通常vc++的定时器timer是基于窗体的,由窗体消息驱动,而本程序实现的timer是基于线程的,不用windows消息驱动,而是基于线程事件驱动的

    基于VC_6_0的多串口通信方法

    介绍了实现多串口通信的基本方法,采用VC++6. 0并结合定时器和多线程技术编写,提出了实现多串 口通信的三种方法,给出了实现的方法和步骤,并对三种方法进行了比较。实践证明,这三种模型均有效地实现了多 串口通信。

    高精度多媒体定时器管理

    利用高精度的CreateWaitableTimer建立定时器,精度可以达到100ns, 使用独立线程进行管理,稳定高效,可靠. 本工程不足之处是还没有实现对定时事件部分进行同步并行处理,有兴趣的朋友自行进一步开发和完善. 原创代码, ...

    CreateThread创建多线程与单线程比较

    仿多线程的效果一般有2种办法:第一种是通过定时器;第二种是启动多线程,不同模式下启动函数不同,mfc与API与WIN32下面注意点也是有区别的! VC启动一个新线程的三种方法,有需要的朋友可以参考下。 第一种...

    visual studio 2008 2010 MFC时间和线程经典例子

    非常简单明了的例子,主体为vc中可用的各种延时,定时器机制(共7种)的直观体现 整合了模式对话框和非模式对话框的创建;多线程的编程;消息的传递;以及系统时间的处理; 其中也包括对UNICODE和CString的处理,char和wchar...

    VC学习大纲 VC学习讲义

    VC工程的编译原理与过程,将工程中不同的类拆分到不同的原文件中,每一个类由一个.h和.cpp文件共同完成,然后解决头文件重复定义问题,培养了学员良好的编程习惯,也为以后分析MFC Appwizard生成的工程奠定了良好...

    C++写的贪吃蛇(含源代码和注释,采用了双缓冲)

    C++写的贪吃蛇小游戏 里面采用了双缓冲技术。。对初学着有帮助!

    高精度VC++计时器及高频事件产生器

    内容索引:VC/C++源码,算法相关,秒表,计时器 这是一个具有高精度计时和高频...计时的精度可以达到ms级,可以作为时间的基准, 运行程序后,你会发现系统定时器频率、多媒体定时器时间、多线程定时器时间在高速运转。

    收藏多年的Windows程序设计

    MDI的范例程序 多任务和多线程 多任务的各种模式 WINDOWS的多线程处理 线程同步 事件信号 线程区域储存空间(TLS) 动态链接库 动态链接库的基本知识 各式各样的DLL讨论 ...

    MCS51工具软件及通讯开发库

    2、多线程串行通讯开发库Communication.dll Communication.dll通讯开发库,基于一个成熟的工业现场应用:使用一台PC机与6000余台单片机设备无人值守全天候运行。该系统现已稳定使用了半年多!尤其,它十分方便于PC...

    C++ MFC实现飞机大战游戏

     AfxMessageBox()是模态对话框,你不进行确认时程序是否往下运行时,它会阻塞你当前的线程,除非你程序是多线程的程序,否则只有等待模态对话框被确认。  在MFC中,afxmessagebox是全局的对话框最安全,也最方便。...

    Windows编程循序渐进.part2

    15.2.2 实例:多线程环境下的数据共享 278 15.3 内核对象与等待函数 280 15.3.1 内核对象 280 15.3.2 等待函数 281 15.4 事件内核对象 283 15.4.1 基本原理 283 15.4.2 实例:使用事件内核对象示例 284 15.5...

Global site tag (gtag.js) - Google Analytics