使用pthread_cond_timedwait打印指定的时间

使用pthread_cond_timedwait打印指定的时间,c,time,pthreads,mutex,waithandle,C,Time,Pthreads,Mutex,Waithandle,嘿,我有一个与pthread_cond_timedwait相关的小问题。我已经尝试在这段代码中实现它。我不能为timedwait找到正确的论点,因为我不太确定我在做什么。如果有人能给我指出正确的方向,我将不胜感激 #include <time.h> #include <stdio.h> #include <pthread.h> #include <stdlib.h> pthread_mutex_t timeLock = PTHREAD_MUTEX

嘿,我有一个与pthread_cond_timedwait相关的小问题。我已经尝试在这段代码中实现它。我不能为timedwait找到正确的论点,因为我不太确定我在做什么。如果有人能给我指出正确的方向,我将不胜感激

#include <time.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

pthread_mutex_t timeLock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t c = PTHREAD_COND_INITIALIZER;

int timeIndex = 0;
time_t times[100];

void print_time(time_t tt)
{
    char buf[80];
    struct tm* st = localtime(&tt);
    strftime(buf, 80, "%c", st);

    printf("Call me on: ");
    printf("%s\n", buf);
}

void *add_time(time_t tt){
    if(timeIndex == 100)
        timeIndex = 0;

    struct timespec ts;
    times[timeIndex] = tt;
    timeIndex++;

    ts.tv_sec = tt;
    print_time(tt); // print element
}

void * call_time()
{
    while(1)
    {
        const time_t c_time = time(NULL);
        int i;
        for(i = 0; i <= 100; i++)
        {
            if(c_time == times[i])
            {
                printf("\nWake me up!\n");
                times[i] = 0;
            }
        }   
    }

}

void * newTime()
{
        while(1)
        {
            time_t f_time;

            f_time = time(NULL); 

            srand ( time(NULL) );
            f_time += rand()%100;

            add_time(f_time);
            sleep(1);
        }
}

int main(void)
{
        pthread_t timeMet;
        pthread_t time;

        pthread_create(&time, NULL, newTime, NULL);
        pthread_create(&timeMet, NULL, call_time, NULL);

        pthread_join(time, NULL);
        pthread_join(timeMet, NULL);
        return 0;
}
#包括
#包括
#包括
#包括
pthread\u mutex\u t timeLock=pthread\u mutex\u初始值设定项;
pthread_cond_t c=pthread_cond_初始值设定项;
int-timeIndex=0;
时间t倍[100];
无效打印时间(时间)
{
char-buf[80];
struct tm*st=localtime(&tt);
strftime(buf,80,“%c”,st);
printf(“打电话给我:”);
printf(“%s\n”,buf);
}
无效*添加时间(时间){
如果(时间索引==100)
时间指数=0;
结构timespects;
时间[时间索引]=tt;
timeIndex++;
ts.tv_sec=tt;
打印时间(tt);//打印元素
}
void*通话时间()
{
而(1)
{
常数时间=时间(空);
int i;

对于(i=0;i如果你不能告诉我你想做什么,你怎么能期望告诉计算机你想做什么?如果你运行代码,它是非常自我解释的。如果你需要帮助,你必须解释你想做什么。运行代码只告诉我代码做什么,而不是你想让它做什么。对不起,我试图让above代码的工作原理相同,但使用pthread_cond_timedwait而不是while循环不断检查数组。@Tom cellic从我可以告诉您的情况来看,您不希望条件变量像
alarm()
getitimer()那样多
。如果您想创建一个生成时间的队列,并在该队列为空或满时发出信号,则可能会出现一个condvar。