如何使用计时器在Visual C ++中每天用数据写一个新文件

时间:2016-01-29 21:14:21

标签: visual-c++ timer

我有一个VC ++ 6.0应用程序的源代码,用于与医疗设备通信并希望它进行修改,以便应用程序创建一个新文件,以便在系统日期更改时转储数据。我没有使用Visual C ++的经验,只是读过计时器类可能很有用。以下是代码中的存根,

CXYZClientTestDlg::CXYZClientTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CXYZlientTestDlg::IDD, pParent)
,m_pEditConnectStatus(NULL)
,m_pEditMsgDisplay(NULL)
,LOG_FILE_PATH_PARAMS ("C:/MyPath/Needs to be a new file Everyday.txt")
,m_AppNumber(_T(""))

//  Code for querying the data from the machine //

// write to file
DumpFile( LOG_FILE_PATH_PARAMS , (unsigned char*)&szBuffer[0] , iReturn );

基本上,我需要每天不断更改LOG_FILE_PATH_PARAMS(可能使用计时器),以便创建新的DumpFile。请帮我解决这个问题,因为我没有VC ++的经验。

1 个答案:

答案 0 :(得分:2)

在头文件中定义计时器ID。

const int TIMER_ID = 1;

将以下内容添加为成员变量。

CTime oldTime;

在OnInitDialog()上设置第一个计时器。定时器处理程序将在下一个时钟调用。

oldTime = CTime::GetCurrentTime();

int time_to_next =  ( 60 * 60 ) - ( oldTime.GetMinute() * 60 + oldTime.GetSecond() );
SetTimer( TIMER_ID, time_to_next * 1000, NULL );

添加OnTimer事件处理程序并检查日期是否已更改。 做一些事情并设置下一个计时器时间。

void CTestDlg::OnTimer(UINT_PTR nIDEvent)
{
    CTime nowTime = CTime::GetCurrentTime();

    if( nowTime.GetDay() != oldTime.GetDay() )
    {
        CString filename;
        filename.Format(_T("Path/to/the/file/%4d_%02d_%02d_blabla.txt"),
            nowTime.GetYear(), nowTime.GetMonth(), nowTime.GetDay());

        // save with the filename
        oldTime = nowTime;
    }

    nowTime = CTime::GetCurrentTime();
    int time_to_next =  ( 60 * 60 ) - ( nowTime.GetMinute() * 60 + nowTime.GetSecond() );
    SetTimer( TIMER_ID, time_to_next * 1000, NULL );

    CDialog::OnTimer(nIDEvent);
}