我为一个对话框添加了WM_TIMER消息函数,并在OnInitDialog() 函数中添加SetTimer(1,10000,NULL);该对话框有两个成员变量分别为
m_time和m_prompt的编辑框
现在我要这个程序每10秒把文本的时间数据与系统时间进行匹配,当时间相等时候就弹出这个对话框,并把文本的时间给m_time,把提示内容
给m_prompt。为什么当程序开始运行10秒后如果文本的时间与系统时间一样的时候,对话框正常显示内容并且对话框是可用的,而当10秒后如果找不到与系统匹配的时间我的对话框变成不可用了呢?但是当找到下一个时间与系统匹配我的对话框又正常显示并可用的。
我文档数据的格式是:
2008-10-16 11:15 asdfghjlk
2008-10-16 11:17 weweweqet
2008-10-16 09:24 gfhhfghg
2008-10-16 09:18 fghfghhhh
2009-07-03 09:51 fghfghtrhr
当系统时间是2008-10-16 11:15时,对话框正常显示内容并可用,而到了2008-10-16 11:16时对话框不可用但是仍然运行,当2008-10-16 11:15时对话框又回复正常了,请问时什么原因呢??下面是代码,请帮忙看看。谢谢
class memo
{
public:
char date[15];
char time[10];
char event[200];
};
void CPrompt::OnTimer(UINT nIDEvent)
{ // TODO: Add your message handler code here and/or call default
int k;
CPrompt pro;
COleDateTime system_time, file_time;
CTime tNow;
UpdateData(TRUE);
int i=0;
fstream file2;
file2.open("C:\\Documents and Settings\\All Users\\Documents\\memo.txt",ios::in);
memo prompt[50];
if(!file2)
{
abort();//中断函数
}
while(!file2.eof())
//判断是否到文件结尾
{file2>>prompt[i].date>>prompt[i].time>>prompt[i].event;
i++;
}
k=i;
while(k>0)//循环检查文本,当第一次读到未尾后从头开始读
{
for(int j=0;j<i;j++)
{
CString m_Str1 = prompt[j].date;
m_Str1+=" ";
m_Str1+=prompt[j].time;
file_time.ParseDateTime(m_Str1);
char buf[30] = {0};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
tNow=CTime::GetCurrentTime();
strftime(buf, 30, "%Y-%m-%d", p);
CString m_Str2=buf;//获取日期
m_Str2+=" ";
m_Str2+=tNow.Format("%H:%M");
system_time.ParseDateTime(m_Str2);
if(system_time==file_time)
{ ShowWindow(SW_RESTORE) ;//当时间到时恢复原来窗口大小
sndPlaySound("f:\\a.wav",SND_ASYNC|SND_LOOP);//循环播放声音。
m_time=prompt[j].date;
m_time+=" ";
m_time+=prompt[j].time;
m_prompt=prompt[j].event;
UpdateData(FALSE);//更新提示内容
k--;
}
}
} file2.close();
UpdateData(FALSE);
}
m_time和m_prompt的编辑框
现在我要这个程序每10秒把文本的时间数据与系统时间进行匹配,当时间相等时候就弹出这个对话框,并把文本的时间给m_time,把提示内容
给m_prompt。为什么当程序开始运行10秒后如果文本的时间与系统时间一样的时候,对话框正常显示内容并且对话框是可用的,而当10秒后如果找不到与系统匹配的时间我的对话框变成不可用了呢?但是当找到下一个时间与系统匹配我的对话框又正常显示并可用的。
我文档数据的格式是:
2008-10-16 11:15 asdfghjlk
2008-10-16 11:17 weweweqet
2008-10-16 09:24 gfhhfghg
2008-10-16 09:18 fghfghhhh
2009-07-03 09:51 fghfghtrhr
当系统时间是2008-10-16 11:15时,对话框正常显示内容并可用,而到了2008-10-16 11:16时对话框不可用但是仍然运行,当2008-10-16 11:15时对话框又回复正常了,请问时什么原因呢??下面是代码,请帮忙看看。谢谢
class memo
{
public:
char date[15];
char time[10];
char event[200];
};
void CPrompt::OnTimer(UINT nIDEvent)
{ // TODO: Add your message handler code here and/or call default
int k;
CPrompt pro;
COleDateTime system_time, file_time;
CTime tNow;
UpdateData(TRUE);
int i=0;
fstream file2;
file2.open("C:\\Documents and Settings\\All Users\\Documents\\memo.txt",ios::in);
memo prompt[50];
if(!file2)
{
abort();//中断函数
}
while(!file2.eof())
//判断是否到文件结尾
{file2>>prompt[i].date>>prompt[i].time>>prompt[i].event;
i++;
}
k=i;
while(k>0)//循环检查文本,当第一次读到未尾后从头开始读
{
for(int j=0;j<i;j++)
{
CString m_Str1 = prompt[j].date;
m_Str1+=" ";
m_Str1+=prompt[j].time;
file_time.ParseDateTime(m_Str1);
char buf[30] = {0};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
tNow=CTime::GetCurrentTime();
strftime(buf, 30, "%Y-%m-%d", p);
CString m_Str2=buf;//获取日期
m_Str2+=" ";
m_Str2+=tNow.Format("%H:%M");
system_time.ParseDateTime(m_Str2);
if(system_time==file_time)
{ ShowWindow(SW_RESTORE) ;//当时间到时恢复原来窗口大小
sndPlaySound("f:\\a.wav",SND_ASYNC|SND_LOOP);//循环播放声音。
m_time=prompt[j].date;
m_time+=" ";
m_time+=prompt[j].time;
m_prompt=prompt[j].event;
UpdateData(FALSE);//更新提示内容
k--;
}
}
} file2.close();
UpdateData(FALSE);
}
ShowWindow(SW_RESTORE) ;//干嘛?
{ ShowWindow(SW_RESTORE) ;//当时间到时恢复原来窗口大小
sndPlaySound("f:\\a.wav",SND_ASYNC|SND_LOOP);//循环播放声音。
m_time=prompt[j].date;
m_time+=" ";
m_time+=prompt[j].time;
m_prompt=prompt[j].event;
UpdateData(FALSE);//更新提示内容
k--; }
=============================
如果系统时间和文件内时间不一致,那么将永远循环下去,因为一直都不会执行k--。
{
}
后应该加个k--
{
}
后应该加个k--
能不能说点有参考价值的建议啊
很感谢scenqion最后一句话“如果系统时间和文件内时间不一致,那么将永远循环下去,因为一直都不会执行k--。”
准备接分