本文原创,版权属作者个人所有,如需转载请联系作者本人。Q&微:155122733
--------------------------------------------------------------------------------------------------------
1 使用线程实现,如下:
#include <pthread.h> #include <stdio.h> #include <time.h> #define E_TIME 1*30 #define RESULT_OK 0 time_t e_start; int tagFlag = 0; //1 初始化 void init() { e_start = time(NULL); } //子线程:监控时间 void watcher(void) { time_t cur; while(1) { cur = time(NULL);//不间断获取当前时间 if(cur-e_start>=E_TIME)//时间持续E_TIME { tagFlag = 1;//标志位置为1 break;//结束循环 } } } int main() { pthread_t t1; int ret; init(); ret = pthread_create(&t1, NULL, (void*)watcher, NULL);//创建子线程 if(ret != 0) { printf("Create pthread error! "); return -1; } else { while(1) { if(tagFlag == 0) { printf("step1 starting... ");//不断执行该动作 } if(tagFlag == 0) { printf("step2 starting... ");//不断执行该动作 } if(tagFlag == 0) { printf("step3 starting... ");//不断执行该动作 } //if(tagFlag) else { pthread_join(t1, NULL); return 0; } } } }
备注:也可以把四个步骤全部执行完毕后退出,只要把上方程序中的四个步骤放在一个tagFlag判断中即可。
另外,也可以不创建线程,直接在每个步骤运行时加个时间判断。
一般采用线程时,基本是要求到达时间后立刻终止运行。而该需求会用到signal相关知识,后续补充。