C语言实现超时检测和回调功能:代码示例与解析
"#include <stdio.h>\n#include <stdlib.h>\n#include <signal.h>\n#include <unistd.h>\n\n// 超时标志\nvolatile sig_atomic_t timeout_flag = 0;\n\n// 超时回调函数\nvoid timeout_callback(int signum)\n{\n timeout_flag = 1;\n}\n\n// 设置超时检测和超时回调\nvoid set_timeout(int timeout)\n{\n struct sigaction sa;\n sa.sa_handler = timeout_callback;\n sigemptyset(&sa.sa_mask);\n sa.sa_flags = 0;\n sigaction(SIGALRM, &sa, NULL);\n alarm(timeout);\n}\n\nint main()\n{\n // 设置超时时间为5秒\n int timeout = 5;\n\n // 设置超时检测和超时回调\n set_timeout(timeout);\n\n // 执行需要检测超时的任务\n // 这里简单地让程序休眠10秒,模拟耗时操作\n sleep(10);\n\n // 检查超时标志\n if (timeout_flag) {\n printf("Task timed out!\n");\n // 执行超时后需要的操作\n // ...\n } else {\n printf("Task completed within the timeout!\n");\n // 执行未超时时需要的操作\n // ...\n }\n\n return 0;\n}\n"\n在上述代码中,set_timeout函数用于设置超时检测和超时回调。它使用sigaction函数注册了一个处理SIGALRM信号的回调函数timeout_callback,并使用alarm函数设置了超时时间。timeout_callback函数中,将超时标志timeout_flag设置为1。\n\n在main函数中,通过调用set_timeout设置超时时间为5秒。然后执行需要检测超时的任务,这里使用sleep函数让程序休眠10秒来模拟耗时操作。\n\n最后,根据超时标志timeout_flag的值判断任务是否超时,进行相应的操作。如果超时,输出"Task timed out!",执行超时后需要的操作;如果未超时,输出"Task completed within the timeout!",执行未超时时需要的操作。\n\n注意:在使用超时检测和超时回调时,需要确保任务的执行时间不会超过超时时间,否则可能会出现错误的超时判断。
原文地址: https://www.cveoy.top/t/topic/pqzp 著作权归作者所有。请勿转载和采集!