我正在試圖讓我的程序在mfc對話框應用程序的循環中24/7全天候檢查系統時間。在MFC對話框應用程序中檢查系統時間24/7
對我到目前爲止所做的一點背景。
我的GUI有幾個按鈕: - 啓動,停止,退出和一些編輯框來顯示值。
它意味着在用戶指定的間隔時間在預定位置24/7讀入.txt文件。這可能是用戶想要的5分鐘,但它必須是5的倍數。例如,5分鐘,10分鐘,15分鐘,20分鐘等等。
讀取.txt文件後,它將比較.txt文件中的字符串並將其輸出到.csv文件。
這就是我想要做的簡短的解釋。現在談談這個問題。
由於我需要程序全天候運行,我試圖讓程序一致地檢查系統時間,並在用戶指定的間隔時間到達時觸發一組函數。
爲此,我提出只要按下啓動按鈕
BOOL start_flag = true;
一個變量,一旦停止按鈕被按下
的start_flag只會返回false,然後我有它在一段時間迴路
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);
}
//////// Timer_Secondary功能//////////
{
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
}
}
任何意見將不勝感激。我希望這篇文章的佈局不會太混亂,因爲我希望儘可能地提供這些內容,以表明我不只是在沒有嘗試自己解決問題的情況下提出問題。
非常感謝您的評論。我設法讓工作時間使用工作線程。爲我節省了大量的時間! :p –