可否让一个c++程序,没隔一段时间内执行一次

时间:2023-01-22 15:52:31
我在用C++做一个自动关机的程序
内容:           
     定义了一个关机函数
      定义了一个取当前时间的函数

main()
{   do
   {
     取当前时间 ;
    }
   while(当前时间!=输入的关机时间)
   调用关机函数;
}

上述程序代码已经实现,问题出现在,当我运行这个程序的时候,由于一直在掉用while循环,CPU使用率占到50%左右,不知道该怎么解决,我的想法是让这个程序每间隔10分钟运行一次,这样就可以解决问题,不知道  可以实现不??

各位帮帮  看看有没有什么其他的想法来帮我解决下问题.

38 个解决方案

#1


如果你用window,控制面板里的计划任务可以满足你的需求。用linux也有类似的方法。用操作系统就可以了。

#2


关注中,有病毒技术也使用了这种方式,但是占用内存很小,占个位置听高人指教!

#3


看起来简单,有点难度啊 。。。。。。。。
看楼下了

#4


我没分啊, 郁闷 来位大虾指点下啊

以后给补上

#5


关机了你的程序也终止了,即使你设置了开机启动,程序也无法知道上次这个程序是什么时候运行和结束的,除非你用文件形式保存下来,不过如果关机不是你的程序来做的,它还是不会得到程序结束的时间,所以确切来说,让你这个程序每隔一段时间运行是不可能的

#6


我的想法是,该程序在启动状态时候,自动读取当前时间并按照程序流程执行,如果下次开机时候将会自动从某个文件中读取上次记录,并按照相关备用方案执行,有点和木马病毒靠近了,关注中!

#7


用windows的任务计划 或者linux的crontab吧,别再自己造轮胎了


至于while占cpu的问题,可以用 sleep() 来简单的解决一下

#8


我记得汇编程序可以用延时程序完成 ,因为每条指令执行需要时间一定,可以用多重循环来实现

#9


我只想问下楼上windows下的 c 伪asm? 支持 16位 cpu操作指令?halt?

#10


其实我觉得用sleep函数挺好!!!

#11


写个windows程序
用OnTimer()做啊

#12


mark 

#13


启动时,算一下离关机的时间,直接休眠到那个时候就可以了。。。

#14


实在不行只能 掉用 Sleep  函数 进行休眠了

#15


main() 
{  do 
  { 
    取当前时间 ; 
    Sleep(100);
    } 
  while(当前时间!=输入的关机时间) 
  调用关机函数; 

#16


ls的完全可以,不过不可以使用  != ,而是 >=;不然时间很难跑到那个点上。

#17


那是我写的好吧?  是lz  不是ls  汗!!!

#18


启动时,算一下离关机的时间,直接休眠到那个时候就可以了。。。

#19


晕,不知道vc有mfc这个东西吗。没用过ctimer类吗?

#20


汗一个...
弄个时间计时器,隔一段时间判断一次条件....就行了!
难度很复杂吗,还是我想的太简单了

#21


时间 计时器  不是也在一直 运行么?


主要是想解决  让他不一直占用CPU的问题

#22


可以考虑,我现在 用的是这个

#23


你要加载的程序,隔一段执行
是退出后再执行,还是程序已执行再执行相关的行为

如果是前者的话,那有点难了, 让子程序这需要挂勾系统,再退出主程序,然后再让子程序判断条件加载主程序...
当然也有其它的方法,
这技术在病毒木马用的比较多,可以查查相关的病毒技术!

#24


时间 计时器  不是也在一直 运行么? 

是一直在行动,但实际上,在现今的PC机是根本感觉不到它在运行的,如果CPU占用过多,那肯定是你判断条件逻辑的问题,或是发现了死循环

#25


像你那样用while来判断,不当机,那是不正常的!!!

这效果现实很简单的...

加个时间器,隔一秒判断条件就行了

像你那样while,那是不间断的判断条件

==死循环

#26


cron 就可以  在任务里注册

#27


引用 25 楼 wangjkk 的回复:
像你那样用while来判断,不当机,那是不正常的!!! 

这效果现实很简单的... 

加个时间器,隔一秒判断条件就行了 

像你那样while,那是不间断的判断条件 

==死循环



问下??  怎么加每隔一秒的计时器,我问的就是这个呀

#28


用sleep吧!当进程休眠的时候是不占用CPU资源的...

#29


用sleep()停止一秒就可以了。

#30


买个10000G的cou实验下,看还占用那么多不了。。。。

#31


楼上的 你太 搞笑了  呵呵

我现在的做法就是用 sleep函数 解决的 

之所以没有结帖 就是想看看大家有什么更好的办法没

#32


SLEEP()

#33


16楼 明显是在说 15楼 所以说LS 
楼主怎么理解的晕了

取当前时间 
然后计算机与目标时间的差值
然后sleep 差值时间
然后关机

关机之前还可能给出个警告

写个批处理都能完成

at 0:00 shutdown -s

#34


貌似和病毒一点关系都没有.

#35


取 计算机的 时间 然后 执行程序而已,
比如 cih

#36


33楼和我想的差不多啊,我是最近看了编程之美后,才有那么点想法的。

#37


用sleep()函数即可

#38


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    system("at 12:25 shutdown -s");
    system("PAUSE");
    return EXIT_SUCCESS;
}

#1


如果你用window,控制面板里的计划任务可以满足你的需求。用linux也有类似的方法。用操作系统就可以了。

#2


关注中,有病毒技术也使用了这种方式,但是占用内存很小,占个位置听高人指教!

#3


看起来简单,有点难度啊 。。。。。。。。
看楼下了

#4


我没分啊, 郁闷 来位大虾指点下啊

以后给补上

#5


关机了你的程序也终止了,即使你设置了开机启动,程序也无法知道上次这个程序是什么时候运行和结束的,除非你用文件形式保存下来,不过如果关机不是你的程序来做的,它还是不会得到程序结束的时间,所以确切来说,让你这个程序每隔一段时间运行是不可能的

#6


我的想法是,该程序在启动状态时候,自动读取当前时间并按照程序流程执行,如果下次开机时候将会自动从某个文件中读取上次记录,并按照相关备用方案执行,有点和木马病毒靠近了,关注中!

#7


用windows的任务计划 或者linux的crontab吧,别再自己造轮胎了


至于while占cpu的问题,可以用 sleep() 来简单的解决一下

#8


我记得汇编程序可以用延时程序完成 ,因为每条指令执行需要时间一定,可以用多重循环来实现

#9


我只想问下楼上windows下的 c 伪asm? 支持 16位 cpu操作指令?halt?

#10


其实我觉得用sleep函数挺好!!!

#11


写个windows程序
用OnTimer()做啊

#12


mark 

#13


启动时,算一下离关机的时间,直接休眠到那个时候就可以了。。。

#14


实在不行只能 掉用 Sleep  函数 进行休眠了

#15


main() 
{  do 
  { 
    取当前时间 ; 
    Sleep(100);
    } 
  while(当前时间!=输入的关机时间) 
  调用关机函数; 

#16


ls的完全可以,不过不可以使用  != ,而是 >=;不然时间很难跑到那个点上。

#17


那是我写的好吧?  是lz  不是ls  汗!!!

#18


启动时,算一下离关机的时间,直接休眠到那个时候就可以了。。。

#19


晕,不知道vc有mfc这个东西吗。没用过ctimer类吗?

#20


汗一个...
弄个时间计时器,隔一段时间判断一次条件....就行了!
难度很复杂吗,还是我想的太简单了

#21


时间 计时器  不是也在一直 运行么?


主要是想解决  让他不一直占用CPU的问题

#22


可以考虑,我现在 用的是这个

#23


你要加载的程序,隔一段执行
是退出后再执行,还是程序已执行再执行相关的行为

如果是前者的话,那有点难了, 让子程序这需要挂勾系统,再退出主程序,然后再让子程序判断条件加载主程序...
当然也有其它的方法,
这技术在病毒木马用的比较多,可以查查相关的病毒技术!

#24


时间 计时器  不是也在一直 运行么? 

是一直在行动,但实际上,在现今的PC机是根本感觉不到它在运行的,如果CPU占用过多,那肯定是你判断条件逻辑的问题,或是发现了死循环

#25


像你那样用while来判断,不当机,那是不正常的!!!

这效果现实很简单的...

加个时间器,隔一秒判断条件就行了

像你那样while,那是不间断的判断条件

==死循环

#26


cron 就可以  在任务里注册

#27


引用 25 楼 wangjkk 的回复:
像你那样用while来判断,不当机,那是不正常的!!! 

这效果现实很简单的... 

加个时间器,隔一秒判断条件就行了 

像你那样while,那是不间断的判断条件 

==死循环



问下??  怎么加每隔一秒的计时器,我问的就是这个呀

#28


用sleep吧!当进程休眠的时候是不占用CPU资源的...

#29


用sleep()停止一秒就可以了。

#30


买个10000G的cou实验下,看还占用那么多不了。。。。

#31


楼上的 你太 搞笑了  呵呵

我现在的做法就是用 sleep函数 解决的 

之所以没有结帖 就是想看看大家有什么更好的办法没

#32


SLEEP()

#33


16楼 明显是在说 15楼 所以说LS 
楼主怎么理解的晕了

取当前时间 
然后计算机与目标时间的差值
然后sleep 差值时间
然后关机

关机之前还可能给出个警告

写个批处理都能完成

at 0:00 shutdown -s

#34


貌似和病毒一点关系都没有.

#35


取 计算机的 时间 然后 执行程序而已,
比如 cih

#36


33楼和我想的差不多啊,我是最近看了编程之美后,才有那么点想法的。

#37


用sleep()函数即可

#38


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    system("at 12:25 shutdown -s");
    system("PAUSE");
    return EXIT_SUCCESS;
}