struct BackupFile
{
CString Resource;
CString Path;
CString Account;
CString Password;
CString Comment;
int Method;
int Security;
int Time;
int Hour;
int Monday;
int Tuesday;
int Wednesday;
int Thursday;
int Friday;
int Saturday;
int Sunday;
};
//上面的是传给线程的自定义结构体UINT FileBackupDlg::FileBakThread1(LPVOID param)//线程函数
{
BackupFile * file1=(BackupFile*) param;
SYSTEMTIME t;
GetLocalTime(&t);//获取本地时间
int day=t.wDay;
bool k=true;//用来记录当天有没有执行过
if(file1->Time==1)//time为0则是每天执行一次,为1则为星期几执行一次
{
while(m_stop01)
{
SYSTEMTIME t1;
GetLocalTime(&t1);
if(file1->Sunday==1&&t1.wDayOfWeek==0&&t1.wDay==day&&file1-our==t1.wHour&&t1.wMinute==00&&k)//判断是不是星期天执行;今天是不星期天,今天几号,几点,有没有执行过任务。如果有执行,刚K=false; {
k=false;
day=t.wDay;
}
if(file1->Monday==1&&t1.wDayOfWeek==0&&t1.wDay==day&&file1->Hour==t1.wHour&&t1.wMinute==00&&k)
{

k=false;
day=t.wDay;
}
if(file1->Tuesday==1&&t1.wDayOfWeek==0&&t1.wDay==day&&file1->Hour==t1.wHour&&t1.wMinute==00&&k)
{

k=false;
day=t.wDay;
}
if(file1->Wednesday==1&&t1.wDayOfWeek==0&&t1.wDay==day&&file1->Hour==t1.wHour&&t1.wMinute==00&&k)
{

k=false;
day=t.wDay;
}
if(file1->Thursday==1&&t1.wDayOfWeek==0&&t1.wDay==day&&file1->Hour==t1.wHour&&t1.wMinute==00&&k)
{

k=false;
day=t.wDay;
}
if(file1->Friday==1&&t1.wDayOfWeek==0&&t1.wDay==day&&file1->Hour==t1.wHour&&t1.wMinute==00&&k)
{

k=false;
day=t.wDay;
}
if(file1->Saturday==1&&t1.wDayOfWeek==0&&t1.wDay==day&&file1->Hour==t1.wHour&&t1.wMinute==00&&k)
{

k=false;
day=t.wDay;
}
    Sleep(60000);
}
}
else
{
while(m_stop02)   //
{
SYSTEMTIME t2;
GetLocalTime(&t2);
if(file1->Hour==t2.wHour&&t2.wMinute==0&&k&&day==t2.wDay)   //满足四个条件才开始执行备份任务:定时时间;定时时间的第0分钟;定时时间(几点钟)内任务有没有执行过;当天有没有执行过
{

k=false;
day=t.wDay; //如果备份当天任务执行过,把当天时间做为标记
Sleep(60000);
}
 }
}


return 0;
}
不执行这个线程就会占50%CPU,郁闷,大牛们来看看为什么

解决方案 »

  1.   

    告诉循环,而且没有任何阻塞线程操作,cpu不给全占了算是不错的了。lz应该是双核的机器吧,不然的话cpu消耗应该是100%
      

  2.   

    在程序结尾处加上下面代码Sleep(2000);
      

  3.   

    你看看是不是每个循环中都有sleep,如果一直循环,肯定就50%了
      

  4.   

    在你程序的恰当地方调用Sleep(10),让当前线程小睡一下,将处理器让给别的线程
      

  5.   

    谢谢各位了,Sleep位置写错了,汗!谢谢各位了!