У меня есть программа командной строки, где я хочу разрешить пользователю печатать текущее время с помощью отдельного потока. В настоящее время у меня он настроен следующим образом:Создайте 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, так что я не уверен, что проблема есть. Кажется, что поток создается правильно.
Вы действительно что-то читаете в 'input'? 'void getTime() {' должно быть 'void * getTime (void * arg) {' как требуется 'pthread_create()', даже если вам не нужно передавать какие-либо аргументы в поток. –
Функция 'pthread' имеет подпись:' void * getTime (void * arg) ', поэтому первое, что вам нужно сделать, это правильно выполнить функцию' getTime() '. – user3629249