使用pthread_cond_timedwait打印指定的时间
嘿,我有一个与pthread_cond_timedwait相关的小问题。我已经尝试在这段代码中实现它。我不能为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
#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。