示例代码如下:
#include <pthread.h>
#include <time.h>
#include <stdio.h>
void do_task()
{
printf("do task!\n");
}
void* scheduled_task(void* args)
{
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&mutex);
while(1)
{
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 2; //设置周期时间间隔;
// 与sleep方法不同的是pthread_cond_timedwait函数在时间等待过程中不会占用独立线程
int rc = pthread_cond_timedwait(&cond, &mutex, &ts);
if (rc == ETIMEDOUT)
{
pthread_mutex_unlock(&mutex);
// 执行特定任务
do_task();
pthread_mutex_lock(&mutex);
}
pthread_mutex_unlock(&mutex);
}
}
int task_thread()
{
pthread_t thread_id;
if (pthread_create(&thread_id, NULL, scheduled_download_crl, NULL) != 0) {
printf("线程创建失败");
return 0;
}
// 非阻塞执行
pthread_join(thread_id, NULL);
// pthread_detach(thread_id);
return 1;
}
int main(int argc, char* argv[])
{
task_thread()
}
与sleep方法不同的是pthread_cond_timedwait函数在时间等待过程中不会占用独立线程。

534

被折叠的 条评论
为什么被折叠?



