使用Visual Studio 2015在C中执行Pthread程序时出现以下错误
错误C2011'timespec':'struct'类型重新定义
以下是我的代码:
#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);
}
答案 0 :(得分:7)
添加此编译器标志:
-DHAVE_STRUCT_TIMESPEC
答案 1 :(得分:3)
尽管已经正确回答了这个问题,但还有另一种方法可以解决这个问题。
首先,问题出现是因为pthreads-win32
内部包含time.h
已经声明timespec struct
。
为了避免这个错误,我们唯一应该做的就是:
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
答案 2 :(得分:1)
在Visual Studio 2015中编译包含MariaDB 10头文件的程序时会出现同样的问题(使用10.1.14查看)。
解决方案是定义以下内容:
class AutoCompleteResult: Mappable {
var result:[AutoComplete]?
required init?(_ map: Map) {
}
func mapping(map: Map) {
result <- map["result"]
}
}
class AutoComplete: Object, Mappable {
dynamic var search: String?
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
//var categories: [Int]? = nil
search <- map[""]
}
}
答案 3 :(得分:0)
在Visual Studio 2015上。
我解决了添加问题:
#define _TIMESPEC_DEFINED
答案 4 :(得分:-5)
删除pthread.h中所有'TIMESPEC'的实例(先备份。)
如果我理解正确,你可能已经下载了pthread并尝试将其安装到你的VS.
但是pthreads.h文件与其他头文件中已经定义的TIMESPEC定义不能很好地配合。
因此,删除定义了TIMESPEC的pthreads.h文件部分。