我有一个命令行程序,我希望允许用户使用单独的线程打印当前时间。我目前的设置如下:
我获取用户输入,然后将其与字符串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收到任何错误,所以我不确定问题是什么。似乎线程正在被正确创建。
答案 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)
指令。