如何解决将结构作为 P 线程参数传递 Linux 无法转换为指针类型
// this is my struct ///
typedef struct
{
HCORE BM_cores[0];
int total_cores;
} BM_PARAMS;
BM_PARAMS BM_Dat;
我正在尝试将此结构传递给 pthread
int Start_monitor(void)
{
int RETVAL=0;
RETVAL = pthread_create(&monitor_thread,NULL,Get_Monitor_Data,(void*)BM_Dat);
if(RETVAL !=0)
{
printf("Error Starting Thread \n");
}
return 0;
}
在 Pthreadcreate 时,我收到一个错误.. 无法转换为指针类型
void *Get_Monitor_Data (void *BM_Dat) // Bus Monitor Thread
{
BM_PARAMS*monitor_params;
int no_of_cores=0;
monitor_params = (BM_PARAMS *) BM_Dat;
BTICard_CardReset(*monitor_params->BM_cores);// reset card if required
return 0;
}
我收到了无法转换为指针类型的错误 我正在使用 Eclipse 进行编码
解决方法
这...
typedef struct
{
HCORE BM_cores[0];
int total_cores;
} BM_PARAMS;
BM_PARAMS BM_Dat;
... 声明变量 BM_Dat
具有类型 BM_PARAMS
,这是一种结构类型。这没什么不对的。
这个线程函数的摘录......
void *Get_Monitor_Data (void *BM_Dat) // Bus Monitor Thread
{
BM_PARAMS*monitor_params;
int no_of_cores=0;
monitor_params = (BM_PARAMS *) BM_Dat;
... 表明它期望它的参数是一个 指向 BM_PARAMS
的指针。这也没什么不对。
但是这个对 pthread_create()
的调用 ...
RETVAL = pthread_create(&monitor_thread,NULL,Get_Monitor_Data,(void*)BM_Dat);
... 正在尝试将 BM_Dat
转换为一个没有意义或不可能的指针。您似乎想要做的是传递变量 BM_dat
的地址。也就是说,你想要这个:
RETVAL = pthread_create(&monitor_thread,&BM_Dat);
没有必要将 &BM_Dat
强制转换为 void *
类型,因为所有对象指针都可以自动转换为类型 void *
(并返回)而无需转换。更一般地,用于算术目的以外的强制转换具有糟糕的代码气味。它们通常要么是不必要的,要么是错误的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。