2017-02-10 1 views
1

コマンドラインプログラムを使用して、別のスレッドを使用して現在の時刻を印刷できるようにします。私は現在、このように設定しています:現在の時刻をコマンドラインに出力するpthreadを作成します。

私はユーザー入力を受け取り、それを文字列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

実際に何かを 'input'に読み込みますか?スレッドに引数を渡す必要がない場合でも、 'void getTime(){'は 'pthread_create()'が要求する 'void * getTime(void * arg){'でなければなりません。 –

+0

'pthread'関数のシグネチャは' void * getTime(void * arg) 'なので、最初に行う必要があるのは' getTime() '関数を修正することです。 – user3629249

答えて

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

コンパイルをし、それを実行します:

これを試してみてください時間が長い25文字が

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

です。

sleep(1)スレッドの実行を待機する命令に注意してください。

関連する問題