Real Time

Posted by Fang Zhou on March 3, 2019

How to realize it

  • Use SetTimer() and OnTimer() functions
  • SetTimer() can trigger program periodically (SetTimer(0,30,NULL))
  • OnTimer() is a callback function to execute the corresponding command

Code demo


	if(nIDEvent == 0){

		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/////////////////////////////// Code for power monitoring //////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		if (StartMonitor) 
		{
			CopyData();
			m_power = CalculatePower();
			UpdateData(false);
		}
    }
if(nIDEvent == 1){
		CString sad;
		m_power_edit.GetWindowText(sad);
		//MessageBox(sad);
		if (StartMonitor) //StartMonitor
		{
			//static int x=5;
			//static int y=0;
			TotalVoltage5s += CalculatePower();
			//TotalVoltage5s += 20;
			xx123++;
			//CString str="";
			//str.Format("%d, %d", xx123, TotalTime);
			//SetDlgItemText(IDC_STATIC13131, str);
			CString sad;
			m_power_edit.GetWindowText(sad);

			int num1 = _ttoi(sad);
			if(xx123 >= num1){
				if(TotalTime > 19){
					//x+=5;
					//m_Chart2d_voltage.SetRange(x-5, x, 0, 100);
					m_Chart2d_voltage.ClearChart();
					TotalTime = 0;
				}

				CTime tm;
				tm=CTime::GetCurrentTime();
				CString str=tm.Format("%X");
				ostringstream os;
				float ds= (float)atof((char *)(LPTSTR)(LPCTSTR)sad);
				os << TotalVoltage5s/ds;
				ostringstream os1;
				m_power_list.InsertColumn(Current_columns,"",LVCFMT_CENTER,80,0);
				m_power_list.SetItemText(0, Current_columns, str);
				m_power_list.SetItemText(1, Current_columns, os.str().c_str());
				m_power_list.SetItemState(Current_columns, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);  
				m_power_list.EnsureVisible(Current_columns, FALSE);


				m_Chart2d_voltage.SetXYValue(TotalTime, TotalVoltage5s/ds, TotalTime, 0);
				TotalTime++;
				TotalVoltage5s = 0;
				xx123 = 0;
			}
		}
		m_Chart2d_voltage.Invalidate();
	}
	CDialog::OnTimer(nIDEvent);
}