C语言如何在同一程序中同时运行两个无限循环?
问题核心原因
普通C程序默认是单线程顺序执行,代码中的第一个无限循环会永久占用执行流,永远无法进入第二个循环执行。
可选实现方案
方案1:单线程逻辑合并(最简易,无额外依赖)
把两个功能的执行逻辑放到同一个无限循环中,根据需求控制执行频率即可,适合两个任务执行频率接近、无长时间阻塞操作的场景:
#include <stdio.h> #include <time.h> #include <unistd.h> // 用于sleep函数 int main() { char cur_time[128]; int timer_count = 0; // 计时器计数示例 for(;;) { // 逻辑1:打印当前时间 time_t t = time(NULL); struct tm* ptm = localtime(&t); strftime(cur_time, 128, "%d-%b-%Y %H:%M:%S", ptm); printf("\rCurrent date and time: %s | 计时器计数:%d", cur_time, timer_count); fflush(stdout); // 强制刷新缓冲区,避免打印不及时 // 逻辑2:计时器计数 timer_count++; sleep(1); // 控制每秒刷新一次,避免CPU占用率100% } return 0; }
方案2:多线程实现(适合任务频率不同、有独立阻塞逻辑的场景)
使用POSIX线程库pthread为每个无限循环创建独立的线程,两个线程会被操作系统调度并行执行:
编译时需要添加
-lpthread参数链接线程库,例如:gcc test.c -o test -lpthread
#include <stdio.h> #include <time.h> #include <unistd.h> #include <pthread.h> // 线程1:实时打印时间 void* print_time(void* arg) { char cur_time[128]; for(;;) { time_t t = time(NULL); struct tm* ptm = localtime(&t); strftime(cur_time, 128, "%d-%b-%Y %H:%M:%S", ptm); printf("\rCurrent date and time: %s", cur_time); fflush(stdout); sleep(1); } return NULL; } // 线程2:计时器逻辑 void* run_timer(void* arg) { int count = 0; for(;;) { // 此处可替换为你自己的计时器逻辑 // 示例:每2秒计数+1,打印输出 count++; printf(" 计时器计数:%d\n", count); sleep(2); } return NULL; } int main() { pthread_t time_thread, timer_thread; // 创建两个线程 pthread_create(&time_thread, NULL, print_time, NULL); pthread_create(&timer_thread, NULL, run_timer, NULL); // 等待线程执行结束(此处两个线程都是死循环,会一直阻塞) pthread_join(time_thread, NULL); pthread_join(timer_thread, NULL); return 0; }
注意事项
- 单线程方案中不要在循环内添加长时间的阻塞操作,否则会拖慢另一个逻辑的执行效率
- 多线程方案中如果两个线程需要操作同一个共享变量,需要添加互斥锁避免竞态问题
- 两个方案中都建议添加
sleep或类休眠逻辑,避免无意义占用100%CPU资源
内容的提问来源于stack exchange,提问作者MrWhoseTheNoob
相关产品推荐
相关产品推荐

