关于函数_beginthread参数的有关问题
关于函数_beginthread参数的问题
想用C语言实现多线程,于是找到了_beginthread这样一个函数,,但在参数上总是不对,求大侠指教啊。
这个函数的原型是
unsigned long _beginthread( void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist );有三个参数,第一个参数是一个返回值为空,参数为空指针的函数指针,,就这个参数出了问题。
我的程序里自定义了一个函数:
void (*RunCircle)(struct Global *ptr);
其中的结构体Global是这样一个全局变量:
struct Global{
int color;
int pre_x;
int pre_y;
int x;
int y;
int pre_wall;
int pre_wall_temp;
}g1,g2;
这几部分在程序里的位置顺序是这样的:
**************************************************************************
void (*RunCircle)(struct Global *ptr);//自定义函数声明
struct Global{
int color;
int pre_x;
int pre_y;
int x;
int y;
int pre_wall;
int pre_wall_temp;
}g1,g2;//结构体声明
struct Global g1={
.....
};//结构体实例的初始化
struct Global g2={
.....
};//结构体实例的初始化
int main()
{
.....
flag1=_beginthread(RunCircle,0,&g1);//函数调用
.....
flag2=_beginthread(RunCircle,0,&g2);//函数调用
}
void (*RunCircle)(struct Global *ptr)//自定义函数的定义
{.....}
***********************************************************************
这是VS2010运行后报错:
“_beginthread”: 不能将参数 1 从“void *”转换为“void (__cdecl *)(void *)”
从“void*”到指向非“void”的指针的转换要求显式类型转换
另外,因为一个库的原因,项目是创建在cpp文件里的,,不知道这个有没有影响。
内容有点长,,小弟实在是解决不了了,,求帮助~~~~~~~~~~
------解决方案--------------------
想用C语言实现多线程,于是找到了_beginthread这样一个函数,,但在参数上总是不对,求大侠指教啊。
这个函数的原型是
unsigned long _beginthread( void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist );有三个参数,第一个参数是一个返回值为空,参数为空指针的函数指针,,就这个参数出了问题。
我的程序里自定义了一个函数:
void (*RunCircle)(struct Global *ptr);
其中的结构体Global是这样一个全局变量:
struct Global{
int color;
int pre_x;
int pre_y;
int x;
int y;
int pre_wall;
int pre_wall_temp;
}g1,g2;
这几部分在程序里的位置顺序是这样的:
**************************************************************************
void (*RunCircle)(struct Global *ptr);//自定义函数声明
struct Global{
int color;
int pre_x;
int pre_y;
int x;
int y;
int pre_wall;
int pre_wall_temp;
}g1,g2;//结构体声明
struct Global g1={
.....
};//结构体实例的初始化
struct Global g2={
.....
};//结构体实例的初始化
int main()
{
.....
flag1=_beginthread(RunCircle,0,&g1);//函数调用
.....
flag2=_beginthread(RunCircle,0,&g2);//函数调用
}
void (*RunCircle)(struct Global *ptr)//自定义函数的定义
{.....}
***********************************************************************
这是VS2010运行后报错:
“_beginthread”: 不能将参数 1 从“void *”转换为“void (__cdecl *)(void *)”
从“void*”到指向非“void”的指针的转换要求显式类型转换
另外,因为一个库的原因,项目是创建在cpp文件里的,,不知道这个有没有影响。
内容有点长,,小弟实在是解决不了了,,求帮助~~~~~~~~~~
------解决方案--------------------
- C/C++ code
void RunCircle(void *ptr) { Global* pGlobal = (Global*)(ptr); //使用pGlobal } flag1=_beginthread(&RunCircle,0,&g1);//