C++ 在MFC对话框应用程序中检查系统时间24/7
我试图让我的程序在mfc对话框应用程序的循环中24/7检查系统时间 关于我目前所做工作的一些背景知识 我的GUI有几个按钮:-开始、停止、退出和几个显示值的编辑框 它意味着由用户以指定的间隔时间24/7在预定位置读取.txt文件。这可能是5分钟到用户想要的时间,但必须是5的倍数。例如,5分钟、10分钟、15分钟、20分钟等等 读取.txt文件后,它将比较.txt文件中的字符串并输出为.csv文件 这就是我要做的简单解释。现在来谈谈手头的问题 因为我需要程序全天候运行,所以我试图让程序一致地检查系统时间,并在达到用户指定的间隔时间时触发一组函数 为此,每当按下开始按钮时,我都会创建一个变量C++ 在MFC对话框应用程序中检查系统时间24/7,c++,mfc,systemtime,C++,Mfc,Systemtime,我试图让我的程序在mfc对话框应用程序的循环中24/7检查系统时间 关于我目前所做工作的一些背景知识 我的GUI有几个按钮:-开始、停止、退出和几个显示值的编辑框 它意味着由用户以指定的间隔时间24/7在预定位置读取.txt文件。这可能是5分钟到用户想要的时间,但必须是5的倍数。例如,5分钟、10分钟、15分钟、20分钟等等 读取.txt文件后,它将比较.txt文件中的字符串并输出为.csv文件 这就是我要做的简单解释。现在来谈谈手头的问题 因为我需要程序全天候运行,所以我试图让程序一致地检查系
BOOL start_flag = true;
只有按下停止按钮,start_标志才会返回false
BOOL start_flag = true;
然后我把它放在一个循环里
while (start_flag)
{
Timer(); // To add the user entered interval time to current time
Timer_Secondary(); // To compare the converted time against the current time
Read_Log(); // Read the logs
}
///////////////////定时器功能//////////////////////
{
CTime curTime = CTime::GetCurrentTime();
timeString_Hour = curTime.Format("%H");
timeString_Minute = curTime.Format("%M");
timeString_Second = curTime.Format("%S");
Hour = atoi(timeString_Hour);
Minute = atoi(timeString_Minute);
Second = atoi(timeString_Second);
if ((first_run == false) && (Int_Frequency < 60))
{
int Minute_Add = Minute + Int_Frequency;
if (Minute_Add >= 60)
{
Minute_Add = Minute_Add - 60;
Hour = Hour + 1;
}
Minute = Minute_Add;
}
if ((first_run == false) && (Int_Frequency >= 60))
{
int Local_Frequency = Int_Frequency;
while (Local_Frequency >= 60)
{
Local_Frequency = Local_Frequency - 60;
Hour = Hour + 1;
}
}
if (first_run)
{
Hour = Hour + 1;
Minute = 00;
Second = 00;
first_run = false;
}
timeString_Hour.Format("%d", Hour);
timeString_Minute.Format("%d", Minute);
timeString_Second.Format("%d", Second);
{
CTime curTime = CTime::GetCurrentTime();
timeString_Hour_Secondary = curTime.Format("%H");
timeString_Minute_Secondary = curTime.Format("%M");
timeString_Second_Secondary = curTime.Format("%S");
Hour_Secondary = atoi(timeString_Hour);
Minute_Secondary = atoi(timeString_Minute);
Second_Secondary = atoi(timeString_Second);
}
对,到目前为止我遇到的问题是,由于while循环,程序被卡在无限循环中,GUI因此冻结,用户无法让它停止
我脑子里想了几件事,但不确定它是否会起作用
while (start_flag)
{
if((Hour_Secondary == Hour) && (Minute_Secondary == Minute) && (Second_Secondary == Second))
{
// Run parsing function in this (main bit of code)
start_flag = false; //Set it to false so it will jump back out of this loop
}
if ((Hour_Secondary != Hour) && (Minute_Secondary != Minute) && (Second_Secondary != Second))
{
// Some form of time function in this to wait every 1 min then loop back to start of while loop)
// With the timer function, the GUI should be usable at this point of time
}
}
任何建议都将不胜感激。我希望这篇文章的布局不要太混乱,因为我希望尽可能多地提供信息,以表明我不仅仅是在提问,而不是试图先自己解决问题。当你在
循环中时,windows消息泵没有处理,因此-你的用户界面冻结。在我看来,您有两种选择:
1) 使用后台线程来完成此操作
2) 调查并使用它来执行计时。这将按照您指定的时间间隔将消息发布到消息队列中(这不是一个实时解决方案,但我认为您没有这个要求),因此您的界面将保持活动状态。在对话框中添加计时器控件并处理WM\u计时器消息
非常感谢您的评论。我设法用一个工作线程来打发时间。这帮我节省了很多时间P