【发布时间】:2012-01-19 05:14:06
【问题描述】:
在使用 C 中的线程时,我遇到了警告
“警告:从不同大小的整数转换为指针”
代码如下
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<pthread.h>
void *print(void *id)
{
int a=10;
printf("My thread id is %ld\n",pthread_self());
printf("Thread %d is executing\n",id);
return (void *) 42;
}
int main()
{
pthread_t th[5];
int t;
int i;
int status;
void *ret;
for(i=0;i<5;i++)
{
status=pthread_create(&th[i],NULL,print,(void *)i); //Getting warning at this line
if(status)
{
printf("Error creating threads\n");
exit(0);
}
pthread_join(th[i],&ret);
printf("--->%d\n",(int *)ret);
}
pthread_exit(NULL);
}
谁能解释如何将整数传递给接收 (void *) 作为参数的函数?
【问题讨论】:
-
在您的平台上检查
sizeof(int)和sizeof(void*)。我怀疑它们不同,这就是您看到警告的原因。 -
@Dinesh:请您 1) 向我们展示那些
sizeofs,我从未见过这样的平台,大量 pthread 手册使用您刚刚展示的代码。 2)接受一个不同的答案,你选择的那个是错误的.. -
请不要接受您选择的答案,因为它是错误的(正如它下面的 cmets 所说)并且会导致错误。
-
只想指出线程的目的是多任务。例如,在游戏中,您可能有一个线程
t,它获取用户的输入,而主程序则执行其他所有操作。游戏可以在t等待您按键的同时继续进行。t就像一个单独的程序。他们是asynchronous。然而,他们加速你的程序的想法是一种误解。事实上,线程实际上可以减慢你的程序。 CPU 仍然必须一次执行一条指令。不要使用线程来试图获得性能。这是自找麻烦。
标签: c casting void-pointers