精华内容
下载资源
问答
  • OnTimer

    2015-04-19 18:43:00
    OnTimer不是多线程。 OnTimer是以SendMessage的方式发送消息到消息队列。 sendMessage必须等待对话框响应完消息后才返回。 转载于:https://www.cnblogs.com/mycway/p/4439623.html...

    OnTimer不是多线程。

    OnTimer是以SendMessage的方式发送消息到消息队列。

    sendMessage必须等待对话框响应完消息后才返回。

    转载于:https://www.cnblogs.com/mycway/p/4439623.html

    展开全文
  • MFC中OnTimer

    2018-09-04 16:52:30
    在MFC中我们经常需要定时读写数据,或者定时刷新界面,更新数据和状态,这就需要用到定时器,其实现函数为OnTimer,下面对其用法步骤(基于VS2010)进行简要说明: 1、在类视图中点击需要使用定时器的对话框类,在...

    在MFC中我们经常需要定时读写数据,或者定时刷新界面,更新数据和状态,这就需要用到定时器,其实现函数为OnTimer,下面对其用法步骤(基于VS2010)进行简要说明:

    1、在类视图中点击需要使用定时器的对话框类,在属性窗口选择消息,在下面的消息函数中选中WM_TIMER,后面选择添加OnTimer函数,如下图所示: 
    OnTimer函数添加

    2、编写OnTimer函数

    void CLD_PowerDlg::OnTimer(UINT_PTR nIDEvent)           //定时读取数据
    {
        switch (nIDEvent)   
        {  
            case 1:   //定时器1处理函数,定时发送数据进行更新
            {
                char *a=NULL;
                a = new char[12];
                a[0]=0x55;  a[1]=0xAA;  a[2]=0xdc;             //数据开头
                a[3]=0x06;
                a[4]=0x00;  
                a[5]=0x03;  
                a[6]=0x44;
                a[7]=0x44;
                a[8]=0xcc;  a[9]=0x33;  a[10]=0xc3; a[11]=0x3c;//数据结尾
                m_SerialPort.WriteData(a,12);   
                a=NULL;
                delete a;
            break; 
            }
    
            case 2:   //定时器2位为状态栏时间信息
            {
                CTime t1;
                t1=CTime::GetCurrentTime();//获取当前系统时间
                m_Statusbar.SetPaneText(2,t1.Format("%Y-%m-%d  %H:%M:%S")); //状态栏显示时间   
            break;   
            }
        }
    
        CDialogEx::OnTimer(nIDEvent);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    3、启动定时器

    SetTimer(1,1000,NULL);      //参数:定时器标号,定时时间(ms)。启动定时器1,每隔1s刷新一次
    • 1

    4、关闭定时器

        KillTimer(1);                               //关定时器1
    • 1

    欢迎各位高手大神批评指正,也欢迎各位同道中人留言讨论!

    展开全文
  • OnTimer使用

    千次阅读 2014-06-10 11:52:47
    OnTimer使用   定时器在VC中的使用频繁,以下讨论定义器的使用方法。  定时器的原型是:  WINUSERAPI UINT WINAPI SetTimer ( HWND hWnd , UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);  ...

    OnTimer使用

     

    定时器在VC中的使用频繁,以下讨论定义器的使用方法。

      定时器的原型是:

      WINUSERAPI UINT WINAPI SetTimer ( HWND hWnd , UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);

        hWnd      是欲设置定时器的窗体句柄。定时时间到时,系统会向该窗体发送WM_TIMER消息。

        nIDEvent      定时器标识符。在一个窗体内可以使用多个定时器,不同的定时器根据nIDEvent来区分。

        uElapse         定时时间,单位是毫秒。

        lpTimerFunc 定时器的回调函数。如果该值为NULL,定时时间到时,定时器发送的消息WM_TIMER由窗体映像该消息的函数处理;否则由回调函数处理,说白一点,这里的回调函数就是取代OnTimer的处理函数。

             通常,我们在使用定时器时,只用到三个参数,即
        UINT CWnd::SetTimer(
                UINT nIDEvent,
         UINT nElapse,
          void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD)
        );

        其实,这个函数只是MFC对API的封装,其实现函数为:

        _AFXWIN_INLINE UINT CWnd::SetTimer(UINT nIDEvent, UINT nElapse,

            void (CALLBACK* lpfnTimer)(HWND, UINT, UINT, DWORD))

      {
                 ASSERT(::IsWindow(m_hWnd));
             return ::SetTimer(m_hWnd, nIDEvent, nElapse,(TIMERPROC)lpfnTimer);
        }

        由此可见,CWnd::SetTimer只是将API函数SetTimer的第一个参数设置成它自己的句柄而已。


        有了上面的认识,对定时器的使用就清楚了,下面举例说明定时器的具体使用。

        1.打开VC,新建一基于对话框的工程,工程名为Test在对话框上添加一按钮,将其ID改为IDC_BUTTON_START,Caption改为Start. 映像该按钮的BN_CLICKED消息,void CTestDlg::OnButtonStart();

        2.再在对话框上添加一按钮,ID为ID_BUTTON_STOP,Caption改为Stop,映像消息为void CTestDlg::OnButtonStop();

        3.添加一个Lable,ID改为IDC_STATIC_TIME,用于记数,表明定时器函数的执行。

      4.映像对话框的WM_TIMER消息,void CTestDlg::OnTimer(UINT nIDEvent);


        以上的实现函数如下所示:

    void CTestDlg::OnButtonStart()

    {

        SetTimer(1,1000,NULL);//启动定时器1,定时时间是1秒

    }

     

    void CTestDlg::OnButtonStop()

    {

        KillTimer(1);        //关闭定时器1。

    }

     

    void CTestDlg::OnTimer(UINT nIDEvent)

    {

        static int nTimer=0;

        CString strTmp="";

        strTmp.Format("Timer:    %d",nTimer++);

        CWnd *pWnd=GetDlgItem(IDC_STATIC_TIME);

        pWnd->SetWindowText(strTmp);  //在Lable中设置新值,表明定时器已经工作。

        CDialog::OnTimer(nIDEvent);

    }

     

        回调函数的使用。

        如果不想使用窗体的WM_TIMER消息函数处理,可以使用回调函数来取代,读者可以在上面例子的基础上,增加一个回调函数,以证实前面的讨论。

        首先,定义一个回调函数,回调函数的定义必须按照如下格式。

    void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime );

     

        我的实现函数如下:

    void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime )

    {

         AfxMessageBox("Timer is running!");//定时器时间到,强出一对话框,表明定时器已经运行。

    }


    将上面的启动函数稍做修改

    void CTestDlg::OnButtonStart()

    {

    //    SetTimer(1,1000,NULL);//启动定时器1,定时时间是1秒

          SetTimer(1,1000,(TIMERPROC)TimerProc);//用回调函数处理,此时对话框的消息处理函数不再处理。

    }
        本来我想将演示程序上传上来,可不知如何上传,所以初学者自己根据上面的操作步骤实验。

    展开全文
  • MFC中添加ontimer的方法

    2015-08-21 20:30:36
    MFC中添加ontimer的方法 刚开始学 直接往里面写 ontimer下面会报错
  • 关于OnTimer

    千次阅读 2010-10-13 19:01:00
    OnTimer()只是说定时触发,并不说它是“后台处理”,它仍会阻塞UI线程的; OnTimer并不是后台线程,它同UI一个线程,所以如果占用UI线程时间过长会阻碍界面过程. WM_TIMER的优先级比较低,对于要求实时...

    OnTimer()只是说定时触发,并不说它是“后台处理”,它仍会阻塞UI线程的;

    OnTimer并不是后台线程,它同UI一个线程,所以如果占用UI线程时间过长会阻碍界面过程.

    WM_TIMER的优先级比较低,对于要求实时更新的程序不适合,线程的优先级比较高,但是消耗的资源也多一些

    (OnTimer)的实现是否属于多线程技术?

    楼主yangchengl(爱在今生)2006-05-01 10:17:31 在 VC/MFC / 基础类 提问

    请解释一下,谢谢! 问题点数:10、回复次数:14Top

     

    1 楼lisypro()回复于 2006-05-01 10:53:25 得分 1

    应该是  
      但是不是标准的多线程Top

    2 楼lonely001(独行客)回复于 2006-05-01 11:01:55 得分 0

    不是Top

    3 楼lonely001(独行客)回复于 2006-05-01 11:03:37 得分 2

    ONTIMER只是WINDOWS内置的消息发生器产生的消息,ONTIMER消息也是要排队的,这就是为什么ONTIMER很多时候并不精确的原因Top

    4 楼lyl_rabbit(阿牛)回复于 2006-05-01 13:53:06 得分 0

    不是,但多线程是通过时间分片实现的Top

    5 楼zh2817()回复于 2006-05-01 14:44:10 得分 0

    不是Top

    6 楼Featured(我握着爱情的门票静静排队……)回复于 2006-05-01 15:18:08 得分 0

    不是。  
      但比较特殊。准确地说应该是“中断”技术Top

    7 楼yangchengl(爱在今生)回复于 2006-05-01 18:14:35 得分 0

    这样说对不对,ONTIMER实现了若干段程序的并行运行,但它并不是为各段程序创建了对应的线程,而是采用了软中断技术。Top

    8 楼soaroc(会飞的猪)回复于 2006-05-01 21:28:09 得分 0

    ONTIMER实现了若干段程序的并行运行  
      -----------------------------------------------------------------------------------  
      对于单CPU来说,是不可能实现程序段的并行运行的,只能是交替运行。像上面的某一楼所说的,其实它与其他的消息没有什么大的区别,只不过此消息的入队是循环的。Top

    9 楼yangchengl(爱在今生)回复于 2006-05-02 08:30:41 得分 0

    它与其他的消息没有什么大的区别,只不过此消息的入队是循环的。  
      这一点解释的好。  
      我说的并行是指宏观上并行。在一定时间内这些程序段都获得了执行的机会。Top

    10 楼BXAllen()回复于 2006-05-02 20:57:03 得分 0

    是单线程的!Top

    11 楼BXAllen()回复于 2006-05-02 21:01:03 得分 4

    mfc在cwnd中的ontimer是调用的api的settimer函数,可以在帮助文档中找到的.调用的函数是通过一个函数指针.如果是多线程的,那么是不可以通过像他定义的那样的函数指针实现的.至于函数的原型,可以自己查一下看看就明白了!  
      Top

    12 楼mjm_d(菠萝蜜多)回复于 2006-05-03 14:02:00 得分 0

    不是系统级的  
      但是你可以用它模拟一些简单的不要求精确的用户自定义级别的线程Top

    13 楼roscoe(草上飞)回复于 2006-05-03 15:43:45 得分 3

    不是多程技术,但应是协作式多任务,线程是抢占式多任务

    展开全文
  • onTimer 使用关键流程 数据处理流程 代码交互流程 onTimer 延迟数据处理的优劣 优点: 缺点: onTimer 编码实践 业务场景描述 代码 场景: 某些特殊业务场景需要延迟数据处理,比如乱序数据。 某些业务...
  • 内容索引:VC/C++源码,系统相关,秒表 C++使用onTimer()函数编写的秒表,时、分、秒、微秒都能设置,点击开始按钮,秒表就开始走动了,窗体上的那几个按钮做的相当漂亮,不少朋友以前专一做出这种按钮,今天竟然在这...
  • onTimer计时器

    2013-07-16 18:17:02
    OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 粗略的说,Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所...
  • VS2005 添加onTimer定时器

    千次阅读 2016-06-18 16:28:11
    SetTimer(1,300,NULL);void CchangeDisplayDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnTimer(nIDEvent); }
  • OnTimer函数的简单应用

    2013-04-10 09:10:40
    OnTimer函数的最基本应用,使用前先点击三角形图标,可以拖动小圆圈移动,
  • flink onTimer定时器实现定时需求

    千次阅读 2020-03-26 12:40:26
    1.业务需求 接收实时数据流数据,实时更新状态,并且每隔一定的时间,将所有状态数据输出。...使用processFunction算子,在processElement函数中仅注册一次定时器,然后在onTimer函数中处理定时器任务,...
  • <p>Seems like the <a href="https://github.com/Countly/countly-sdk-ios/blob/19.02/Countly.m#L237"><code>onTimer</code></a> method that is called when the timer fires to clear up the events currently in...
  • 串口通讯 以及Ontimer控件的应用。
  • MFC中定时器OnTimer函数

    2019-10-21 13:12:38
    在MFC中我们经常需要定时读写数据,或者定时刷新界面,更新数据和状态,这就需要用到定时器,其实现函数为OnTimer,下面对其用法步骤(基于VS2010)进行简要说明: 1、在类视图中点击需要使用定时器的对话框类,在...
  • OnTimer()函数

    千次阅读 2016-01-14 13:50:28
    //类向导里面添加WM_TIMER消息,然后在OnTimer里面添加响应代码 //初始化函数中设置 SetTimer(1, 500, NULL);//事件1每500毫秒执行一次 //定义OnTimervoid ImgPro::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加...
  • 如图,如果case2和onbutton1中的2不变时,按下button1就可以启动ontimer,如果把case2改成case1,ontimer2改成ontimer1,settimer2改成settimer1,就不可以了![图片]...
  • MFC中OnTimer函数

    千次阅读 2015-05-29 12:56:24
    关于OnTimer()    OnTimer()函数是响应用SetTimer()函数设定的时钟发送的时钟消息的,你没设定时钟,就不会有时钟消息,OnTimer()里的语句当然也不会被调用。  为类添加VM_TIMER消息响应,会看到类中多了个...
  • VC 基于onTimer()函数实现秒表功能,时、分、秒、微秒都能设置,还可以随时清零。操作方法:点击开始按钮,秒表就开始工作了。本程序的另一个亮点是界面中的按钮做的也相当漂亮哦。
  • MFC中OnTimer的使用

    2018-05-15 07:57:46
    OnTimer()函数用于实现定式控制功能,主要有三个函数实现的(1)SetTimer():设置一个定时器开始执行计时器(2)KillTimer():停止计时器(3)OnTimer():是计时器所执行的代码SetTimer(窗口句柄,定时器ID ,时间...
  • MFC OnTimer的用法问题

    2016-02-24 14:54:22
    MFC 用SetTimer创建了一个定时器,并且按照教程编写了OnTimer但是为什么没法触发?
  • 在MFC中我们可能需要定时读写数据或是更新状态,这时候就需要用到定时器,其实现函数是OnTimer(),下面对其用法做一些简单的介绍(基于VS2015) 1、在工程的类视图中点击需要使用定时器的对话框类,在属性窗口中选择...
  • MFC中OnTimer的应用

    2018-11-15 17:47:54
    文章目录一、OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现:二、先了解下SetTimer这个API函数的原型在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了当不需要计时器...
  • SetTimer OnTimer WM_TIMER

    2019-09-27 20:30:26
    SetTimer(1, 2000, 0); void CTest::OnTimer(UINT nIDEvent){ // TODO: Add your message handler code here and/or call default AfxMessageBox(_T("Timer perform success!")); CDialog::OnTime...
  • setimer ontimer转载

    2011-04-25 10:39:00
    Setimer和Ontimer的使用(转) 关于OnTimer()函数的填写,对于CDialog,可以Ctrl+W中添加; 对于SetTimer可以在初始化当中添加! OnTimer()函数是响应用SetTimer()函数设定的时钟发送的时钟...
  • MFC中OnTimer函数的使用方法

    千次阅读 2017-08-26 16:01:19
    OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 粗略的说,Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时...
  • Windows中OnTimer和线程

    千次阅读 2015-03-31 18:56:42
    Windows中OnTimer和线程
  • MFC中OnTimer定时器用法

    千次阅读 2017-11-16 18:37:06
    定时器工作主要流程:设置定时器SetTimer,时间到后调用OnTimer函数,关闭定时器KillTimer。可以在程序初始化用SetTimer函数弄成多个线程类似,并行进行多个函数功能。 1.1 SetTimer(H,nID,elipse,NULL) 函数作用...
  • Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所执行的代码。KillTimer用于停止计时器。 Settimer是设置,Ontimer是响应Settimer消息的。 SetTimer函数的用法 1 )用WM_TIMER来设置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,182
精华内容 472
关键字:

ontimer