创建将当前时间打印到命令行的pthread

时间:2017-02-10 18:45:13

标签: c multithreading time pthreads

我有一个命令行程序,我希望允许用户使用单独的线程打印当前时间。我目前的设置如下:

我获取用户输入,然后将其与字符串time进行比较。如果它们相等,我创建一个设置时间变量的新线程。

char currentTime[20];
if (strcmp(input, "time") == 0) {
    pthread_t thread;
    int rc = pthread_create(&thread, NULL, getTime, NULL);
    if (rc) {
            printf("ERROR; return code from pthread_create() is %d\n", rc);
            exit(-1);
    }
}

我的getTime功能:

void getTime() {
    time_t rawtime;
    struct tm * timeinfo;
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    sprintf(currentTime,"%s", asctime (timeinfo));
    printf("%s", currentTime);
    pthread_exit(NULL);
}

我从此收到Abort trap 6错误,但我没有从pthread收到任何错误,所以我不确定问题是什么。似乎线程正在被正确创建。

1 个答案:

答案 0 :(得分:1)

getTime()函数不返回任何内容。

currentTime缓冲区太短了。

试试这个:

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

static void * getTime( void * arg ) {
   time_t rawtime;
   struct tm * timeinfo;
   time ( &rawtime );
   timeinfo = localtime ( &rawtime );
   printf("%s", asctime (timeinfo));
   return NULL;
}

int main( int argc, char * argv[] ) {
   pthread_t thread;
   int       rc = pthread_create( &thread, NULL, getTime, NULL );
   if (rc) {
      printf( "ERROR; return code from pthread_create() is %d\n", rc );
      exit( -1 );
   }
   sleep( 1 );
   return 0;
}

编译并执行它:

$ gcc -Wall -o timeThread timeThread.c -lpthread
$ ./timeThread 
Fri Feb 10 19:55:06 2017
$

时间长达25个字符。

注意等待线程执行的sleep(1)指令。