2017-02-10 4 views
1

Ich habe ein Befehlszeilenprogramm, wo ich den Benutzer die aktuelle Zeit mit einem separaten Thread drucken möchten. Ich habe es derzeit so eingerichtet:Erstellen pthread, die aktuelle Zeit auf die Befehlszeile

Ich bekomme die Benutzereingabe, und vergleichen Sie es dann mit der Zeichenfolge time. Wenn sie gleich sind, erstelle ich einen neuen Thread, der die Zeitvariable festlegt.

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); 
    } 
} 

Meine getTime Funktion:

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

Ich erhalte eine Abort trap 6 Fehler aus, aber ich bekomme keine Fehler von pthread, also bin ich nicht sicher, was das Problem ist. Es scheint, als ob der Thread richtig erstellt wird.

+0

Liest du tatsächlich etwas in 'Eingang'? 'void getTime() {' sollte 'void * getTime (void * arg) {' wie von 'pthread_create()' erforderlich sein, auch wenn Sie dem Thread keine Argumente übergeben müssen. –

+0

Eine 'Pthread'-Funktion hat die Signatur:' void * getTime (void * arg) 'also müssen Sie zuerst Ihre' getTime() '-Funktion korrigieren. – user3629249

Antwort

1

getTime() Funktion gibt nichts zurück.

currentTime Puffer ist zu kurz.

Versuchen Sie folgendes:

#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; 
} 

Compile und führen Sie es aus:

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

Die Zeit 25 Zeichen lang ist.

Beachten Sie die Anweisung sleep(1), um die Threadausführung zu warten.

Verwandte Themen