http://www.cnblogs.com/kangwang1988/archive/2010/09/16/1827872.html

解决方案 »

  1.   

    非常感谢你的回答,请问有加上VC界面的例程吗?
    #include "windows.h"
    #include <stdio.h>#include "Mmsystem.h"#pragma comment( lib, "Winmm.lib" )void WINAPI mycallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
     printf( "comming..\n" ); 
    }int main()
    {
     MMRESULT mr = timeSetEvent( 1000,0,mycallback,0,TIME_CALLBACK_FUNCTION); MSG msg; while( GetMessage(&msg, NULL, 0, 0 ) )
     {
      ::TranslateMessage( &msg );
      ::DispatchMessage( &msg );
     } return 0;
    }
      

  2.   

    非常感谢你的回答,请问有加上VC界面的例程吗?
    #include "windows.h"
    #include <stdio.h>#include "Mmsystem.h"#pragma comment( lib, "Winmm.lib" )void WINAPI mycallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
     printf( "comming..\n" ); 
    }int main()
    {
     MMRESULT mr = timeSetEvent( 1000,0,mycallback,0,TIME_CALLBACK_FUNCTION); MSG msg; while( GetMessage(&msg, NULL, 0, 0 ) )
     {
      ::TranslateMessage( &msg );
      ::DispatchMessage( &msg );
     } return 0;
    }
    您好,如果一个界面上有两个编辑框,其中一个编辑框中的数据时实时采集的,在回调函数中对这个编辑框中的数据处理
    用timesetevent 1ms调用一次这个回调函数,然后处理后的数据再显示在界面上的编辑框中
    现在问题是,如果我在回调函数中用Updatedata()就不行,怎么才能在回调函数中处理编辑框中的数据呢?不上感激啊
      

  3.   

    非常感谢你的回答,请问有加上VC界面的例程吗?
    #include "windows.h"
    #include <stdio.h>#include "Mmsystem.h"#pragma comment( lib, "Winmm.lib" )void WINAPI mycallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
     printf( "comming..\n" ); 
    }int main()
    {
     MMRESULT mr = timeSetEvent( 1000,0,mycallback,0,TIME_CALLBACK_FUNCTION); MSG msg; while( GetMessage(&msg, NULL, 0, 0 ) )
     {
      ::TranslateMessage( &msg );
      ::DispatchMessage( &msg );
     } return 0;
    }
    您好,如果一个界面上有两个编辑框,其中一个编辑框中的数据时实时采集的,在回调函数中对这个编辑框中的数据处理
    用timesetevent 1ms调用一次这个回调函数,然后处理后的数据再显示在界面上的编辑框中
    现在问题是,如果我在回调函数中用Updatedata()就不行,怎么才能在回调函数中处理编辑框中的数据呢?不上感激啊
    在回调函数中用Updatedata()就不行,这句话是什么意思,是更新不了?你的控件绑定数值类型变量了吗?具体的代码是怎么写的?
      

  4.   

    非常感谢你的回答,请问有加上VC界面的例程吗?
    #include "windows.h"
    #include <stdio.h>#include "Mmsystem.h"#pragma comment( lib, "Winmm.lib" )void WINAPI mycallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
     printf( "comming..\n" ); 
    }int main()
    {
     MMRESULT mr = timeSetEvent( 1000,0,mycallback,0,TIME_CALLBACK_FUNCTION); MSG msg; while( GetMessage(&msg, NULL, 0, 0 ) )
     {
      ::TranslateMessage( &msg );
      ::DispatchMessage( &msg );
     } return 0;
    }
    您好,如果一个界面上有两个编辑框,其中一个编辑框中的数据时实时采集的,在回调函数中对这个编辑框中的数据处理
    用timesetevent 1ms调用一次这个回调函数,然后处理后的数据再显示在界面上的编辑框中
    现在问题是,如果我在回调函数中用Updatedata()就不行,怎么才能在回调函数中处理编辑框中的数据呢?不上感激啊
    在回调函数中用Updatedata()就不行,这句话是什么意思,是更新不了?你的控件绑定数值类型变量了吗?具体的代码是怎么写的?
    double GetFeedbackSignal()
    {
    double fankui;
    UpdateDate();
            fankui = m_fankui;
    return fankui;
    }double GetDemandSignal()
    {
    double sheding;
    UpdateDate();
            sheding = m_sheding;
    return sheding;
    }void SendControlSignal(double x)
    {}void CALLBACK PIDControl(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
    static double dvalue[3];
    static double dOldError;
    double dOutSignal;                                 //PID控制的输出
    double dError;
    double dDemandSignal = GetDemandSignal();
    double dFeedbackSignal = GetFeedbackSignal();
    UpdateData();
    dError = dDemandSignal - dFeedbackSignal;
    dvalue[0] = m_KP*dError;                              //比例
    dvalue[1] = dvalue[1]+m_KI*dError*dTimeInterval;     //积分
    dvalue[2] = m_KD*(dError-dOldError)/ dTimeInterval;  //微分
    dOutSignal = dvalue[0]+ dvalue[1]+ dvalue[2];
    SendControlSignal(dOutSignal);                     //这个函数是把控制量输出到D/A,然后传送到以后的环节进行控制
    }
    这是程序,m_KP,m_KI,m_KD就是编辑框中输入的数,m_sheding,m_fankui也是编辑框中的数,是实时采集的
    PIDControl是回调函数,我想用一个开始按钮调用timesetevent函数,每1ms调用一次回调函数,还有一个停止按钮,是使用killtimeevent,这怎么实现呢?
      

  5.   

    非常感谢你的回答,请问有加上VC界面的例程吗?
    #include "windows.h"
    #include <stdio.h>#include "Mmsystem.h"#pragma comment( lib, "Winmm.lib" )void WINAPI mycallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
     printf( "comming..\n" ); 
    }int main()
    {
     MMRESULT mr = timeSetEvent( 1000,0,mycallback,0,TIME_CALLBACK_FUNCTION); MSG msg; while( GetMessage(&msg, NULL, 0, 0 ) )
     {
      ::TranslateMessage( &msg );
      ::DispatchMessage( &msg );
     } return 0;
    }
    您好,如果一个界面上有两个编辑框,其中一个编辑框中的数据时实时采集的,在回调函数中对这个编辑框中的数据处理
    用timesetevent 1ms调用一次这个回调函数,然后处理后的数据再显示在界面上的编辑框中
    现在问题是,如果我在回调函数中用Updatedata()就不行,怎么才能在回调函数中处理编辑框中的数据呢?不上感激啊
    在回调函数中用Updatedata()就不行,这句话是什么意思,是更新不了?你的控件绑定数值类型变量了吗?具体的代码是怎么写的?
    double GetFeedbackSignal()
    {
    double fankui;
    UpdateDate();
            fankui = m_fankui;
    return fankui;
    }double GetDemandSignal()
    {
    double sheding;
    UpdateDate();
            sheding = m_sheding;
    return sheding;
    }void SendControlSignal(double x)
    {}void CALLBACK PIDControl(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
    static double dvalue[3];
    static double dOldError;
    double dOutSignal;                                 //PID控制的输出
    double dError;
    double dDemandSignal = GetDemandSignal();
    double dFeedbackSignal = GetFeedbackSignal();
    UpdateData();
    dError = dDemandSignal - dFeedbackSignal;
    dvalue[0] = m_KP*dError;                              //比例
    dvalue[1] = dvalue[1]+m_KI*dError*dTimeInterval;     //积分
    dvalue[2] = m_KD*(dError-dOldError)/ dTimeInterval;  //微分
    dOutSignal = dvalue[0]+ dvalue[1]+ dvalue[2];
    SendControlSignal(dOutSignal);                     //这个函数是把控制量输出到D/A,然后传送到以后的环节进行控制
    }
    这是程序,m_KP,m_KI,m_KD就是编辑框中输入的数,m_sheding,m_fankui也是编辑框中的数,是实时采集的
    PIDControl是回调函数,我想用一个开始按钮调用timesetevent函数,每1ms调用一次回调函数,还有一个停止按钮,是使用killtimeevent,这怎么实现呢?
    把killtimer写在那个停止按钮的消息处理函数中就可以了
      

  6.   

    非常感谢你的回答,请问有加上VC界面的例程吗?
    #include "windows.h"
    #include <stdio.h>#include "Mmsystem.h"#pragma comment( lib, "Winmm.lib" )void WINAPI mycallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
     printf( "comming..\n" ); 
    }int main()
    {
     MMRESULT mr = timeSetEvent( 1000,0,mycallback,0,TIME_CALLBACK_FUNCTION); MSG msg; while( GetMessage(&msg, NULL, 0, 0 ) )
     {
      ::TranslateMessage( &msg );
      ::DispatchMessage( &msg );
     } return 0;
    }
    您好,如果一个界面上有两个编辑框,其中一个编辑框中的数据时实时采集的,在回调函数中对这个编辑框中的数据处理
    用timesetevent 1ms调用一次这个回调函数,然后处理后的数据再显示在界面上的编辑框中
    现在问题是,如果我在回调函数中用Updatedata()就不行,怎么才能在回调函数中处理编辑框中的数据呢?不上感激啊
    在回调函数中用Updatedata()就不行,这句话是什么意思,是更新不了?你的控件绑定数值类型变量了吗?具体的代码是怎么写的?
    double GetFeedbackSignal()
    {
    double fankui;
    UpdateDate();
            fankui = m_fankui;
    return fankui;
    }double GetDemandSignal()
    {
    double sheding;
    UpdateDate();
            sheding = m_sheding;
    return sheding;
    }void SendControlSignal(double x)
    {}void CALLBACK PIDControl(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
    static double dvalue[3];
    static double dOldError;
    double dOutSignal;                                 //PID控制的输出
    double dError;
    double dDemandSignal = GetDemandSignal();
    double dFeedbackSignal = GetFeedbackSignal();
    UpdateData();
    dError = dDemandSignal - dFeedbackSignal;
    dvalue[0] = m_KP*dError;                              //比例
    dvalue[1] = dvalue[1]+m_KI*dError*dTimeInterval;     //积分
    dvalue[2] = m_KD*(dError-dOldError)/ dTimeInterval;  //微分
    dOutSignal = dvalue[0]+ dvalue[1]+ dvalue[2];
    SendControlSignal(dOutSignal);                     //这个函数是把控制量输出到D/A,然后传送到以后的环节进行控制
    }
    这是程序,m_KP,m_KI,m_KD就是编辑框中输入的数,m_sheding,m_fankui也是编辑框中的数,是实时采集的
    PIDControl是回调函数,我想用一个开始按钮调用timesetevent函数,每1ms调用一次回调函数,还有一个停止按钮,是使用killtimeevent,这怎么实现呢?
    把killtimer写在那个停止按钮的消息处理函数中就可以了
    不行啊,出错啊,错误报告上说UpdateData()没定义,还有那些编辑框对应的变量也出错,开始按钮中直接调用的timesetevent也出错啊,应该是不同的线程,你知道怎么改弄吗
      

  7.   

    非常感谢你的回答,请问有加上VC界面的例程吗?
    #include "windows.h"
    #include <stdio.h>#include "Mmsystem.h"#pragma comment( lib, "Winmm.lib" )void WINAPI mycallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
     printf( "comming..\n" ); 
    }int main()
    {
     MMRESULT mr = timeSetEvent( 1000,0,mycallback,0,TIME_CALLBACK_FUNCTION); MSG msg; while( GetMessage(&msg, NULL, 0, 0 ) )
     {
      ::TranslateMessage( &msg );
      ::DispatchMessage( &msg );
     } return 0;
    }
    您好,如果一个界面上有两个编辑框,其中一个编辑框中的数据时实时采集的,在回调函数中对这个编辑框中的数据处理
    用timesetevent 1ms调用一次这个回调函数,然后处理后的数据再显示在界面上的编辑框中
    现在问题是,如果我在回调函数中用Updatedata()就不行,怎么才能在回调函数中处理编辑框中的数据呢?不上感激啊
    在回调函数中用Updatedata()就不行,这句话是什么意思,是更新不了?你的控件绑定数值类型变量了吗?具体的代码是怎么写的?
    double GetFeedbackSignal()
    {
    double fankui;
    UpdateDate();
            fankui = m_fankui;
    return fankui;
    }double GetDemandSignal()
    {
    double sheding;
    UpdateDate();
            sheding = m_sheding;
    return sheding;
    }void SendControlSignal(double x)
    {}void CALLBACK PIDControl(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
    {
    static double dvalue[3];
    static double dOldError;
    double dOutSignal;                                 //PID控制的输出
    double dError;
    double dDemandSignal = GetDemandSignal();
    double dFeedbackSignal = GetFeedbackSignal();
    UpdateData();
    dError = dDemandSignal - dFeedbackSignal;
    dvalue[0] = m_KP*dError;                              //比例
    dvalue[1] = dvalue[1]+m_KI*dError*dTimeInterval;     //积分
    dvalue[2] = m_KD*(dError-dOldError)/ dTimeInterval;  //微分
    dOutSignal = dvalue[0]+ dvalue[1]+ dvalue[2];
    SendControlSignal(dOutSignal);                     //这个函数是把控制量输出到D/A,然后传送到以后的环节进行控制
    }
    这是程序,m_KP,m_KI,m_KD就是编辑框中输入的数,m_sheding,m_fankui也是编辑框中的数,是实时采集的
    PIDControl是回调函数,我想用一个开始按钮调用timesetevent函数,每1ms调用一次回调函数,还有一个停止按钮,是使用killtimeevent,这怎么实现呢?
    把killtimer写在那个停止按钮的消息处理函数中就可以了
    不行啊,出错啊,错误报告上说UpdateData()没定义,还有那些编辑框对应的变量也出错,开始按钮中直接调用的timesetevent也出错啊,应该是不同的线程,你知道怎么改弄吗UpDateData();用这个的前提是给控件绑定的变量是value的变量