Reputation: 493
While executing a Pthread program in C using Visual Studio 2015, I got the following error:
Error C2011 'timespec': 'struct' type redefinition
The following is my code:
#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);
}
Upvotes: 9
Views: 10683
Reputation: 1
On Visual Studio 2015.
I solve the problem adding:
#define _TIMESPEC_DEFINED
Upvotes: 0
Reputation: 12263
Despite this question is already answered correctly, there is also another way to solve this problem.
First, problem occurs because pthreads-win32
internally includes time.h
which already declares timespec struct
.
To avoid this error the only thing we should do is this:
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
Upvotes: 9
Reputation: 1
Delete all instances of 'TIMESPEC' in pthread.h (Make a backup first.)
If I understand it correctly, you probably downloaded pthreads and tried installing it into your VS.
But the pthreads.h file doesn't play nicely with the TIMESPEC defintions already defined in some other header file.
So, delete the portions of the pthreads.h file where TIMESPEC is defined.
Upvotes: -6
Reputation: 2823
The same problem happens when compiling programs in Visual Studio 2015 that include MariaDB 10 header files (saw it with 10.1.14).
The solution there is to define the following:
STRUCT_TIMESPEC_HAS_TV_SEC
STRUCT_TIMESPEC_HAS_TV_NSEC
Upvotes: 1