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í:
- Timespec: struct type Error c2011 3 respuestas
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.