c windows visual-studio pthreads timespec

Error de redefinición de Timespec



windows visual-studio (1)

pthreads-win32 (que supongo que estás usando) puede incluir internamente time.h ( time.h también es comúnmente incluido por otras bibliotecas / encabezados) - y time.h ya declara timespec (también lo hace de una manera compatible). con pthreads) - sin embargo, pthread.h pthreads-win32 no tiene los guardias de inclusión válidos para este caso (¡ pthread.h vergüenza para ellos!). pthreads intenta declararlo porque lo necesita internamente, pero dado que es posible, no necesitará todo el time.h . Por lo tanto, intenta declarar solo el timespec si es posible. Aún así, simplemente puede agregar

#define HAVE_STRUCT_TIMESPEC

before #include <pthread.h> - que indicará al encabezado pthreads-win32 que ya tiene un timespec adecuado, y permitirá que su código se compile correctamente.

Alternativamente, si está usando pthreads extensivamente, puede querer editar el archivo de encabezado en sí mismo; simplemente agregue ese #define HAVE_STRUCT_TIMESPEC en algún lugar cerca del comienzo, y listo.

Lectura adicional: http://mingw-users.1079350.n2.nabble.com/mingw-error-redefinition-of-struct-timespec-td7583722.html

Esta pregunta ya tiene una respuesta aquí:

Mientras ejecutaba un programa Pthread en C usando Visual Studio 2015, recibí el siguiente error:

Error C2011 ''timespec'': ''struct'' type redefinition

El siguiente es mi código:

#include<pthread.h> #include<stdlib.h> #include<stdio.h> void *calculator(void *parameter); int main(/*int *argc,char *argv[]*/) { pthread_t thread_obj; pthread_attr_t thread_attr; char *First_string = "abc"/*argv[1]*/; pthread_attr_init(&thread_attr); pthread_create(&thread_obj,&thread_attr,calculator,First_string); } void *calculator(void *parameter) { int x=atoi((char*)parameter); printf("x=%d", x); }

El archivo de encabezado pthread.h contiene el siguiente código relacionado con timespec:

#if !defined(HAVE_STRUCT_TIMESPEC) #define HAVE_STRUCT_TIMESPEC #if !defined(_TIMESPEC_DEFINED) #define _TIMESPEC_DEFINED struct timespec { time_t tv_sec; long tv_nsec; }; #endif /* _TIMESPEC_DEFINED */ #endif /* HAVE_STRUCT_TIMESPEC */

Ningún otro archivo de encabezado que utilizo usa la estructura de timespec , por lo que no hay ninguna posibilidad de redefinición. No hay posibilidad de que un archivo de encabezado dañado se haya descargado del sitio web de pthread opensource.