Vijay Manohar
Vijay Manohar

Reputation: 493

Visual Studio error with 'timespec' structure

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

Answers (5)

Rom&#225;n Castillo
Rom&#225;n Castillo

Reputation: 1

On Visual Studio 2015.

I solve the problem adding:

#define _TIMESPEC_DEFINED

Upvotes: 0

NutCracker
NutCracker

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

user_0
user_0

Reputation: 3363

Add this compiler flag:

-DHAVE_STRUCT_TIMESPEC

Upvotes: 9

jinisnotmyname
jinisnotmyname

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

Joao Costa
Joao Costa

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

Related Questions