#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <sys/errno.h>
#include <pthread.h>
#include <stdlib.h>
typedef struct alarm_tag
{
int seconds;
char message[64];
}alarm_t;
void * alarm_thread(void * arg)
{
alarm_t * alarm = (alarm_t*)arg;
int status;
status = pthread_detach(pthread_self());
if(status != 0)
{
printf("Detach thread\n");
exit(0);
}
sleep(alarm->seconds);
printf("(%d) %s\n",alarm->seconds,alarm->message);
free(alarm);
return NULL;
}
int main()
{
char line[128];
int seconds,status;
char message[64];
alarm_t* alarm;
pthread_t thread;
while(1)
{
printf("Alarm > ");
if(fgets(line,sizeof(line),stdin) == NULL)
exit(0);
if(strlen(line) <= 1)
continue;
alarm = (alarm_t*)malloc(sizeof(alarm_t));
if(alarm == NULL)
printf("Allocate alarm\n");
if(sscanf(line,"%d %64[^\n]",&seconds,message) < 2)
{
fprintf(stderr,"Bad command\n");
free(alarm);
}
else
{
status = pthread_create(&thread,NULL,alarm_thread,alarm);
if(status != 0)
{
printf("Create alarm thread\n");
exit(0);
}
}
}
return 0;
}
/*gcc alarm_thread.c -lpthread*/
线程版本的闹钟
最新推荐文章于 2021-11-13 17:47:11 发布