我有一个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 ++的经验。
答案 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);
}