C4中线程传递参数问题:
c4droid吧
全部回复
仅看楼主
level 13
savage200 楼主
在Linux环境,线程参数可以直接从函数入口传入(经强制转换),比如void thread(int arg),移植到C4后发现不行,只支持void (*)(void*),目前只能暂时采取通过线程id识别和全局变量来传递。不知哪位大神有别的方法?
如下:
#include <stdio.h>
#include <pthread.h>
void * thread(void*) //原型是void thread(int i)//i为传入形参,在c4中不支持
{
int i;
printf("This is %d pthread.\n",i);
}
2017年01月13日 04点01分 1
level 13
所谓的强转指的是你把参数强转成void*传进去之后在线程里再转回来,不是让你把函数指针强转成void(*)(void*)
2017年01月13日 04点01分 2
我试试
2017年01月13日 07点01分
level 8
取地址转成int,线程里再转回去
2017年01月13日 05点01分 3
貌似不行,linux可以,c4编译通不过,说不能转换
2017年01月13日 07点01分
强转后编译能过,但运行出错
2017年01月13日 07点01分
@savage200 c4我运行的时候可以
2017年01月13日 10点01分
level 13
savage200 楼主
void *thread(void *t)
{
//long t=pthread_self();
int i=*(int *)t;
2017年01月13日 07点01分 5
能过编译,运行crush
2017年01月13日 07点01分
我再查下,应该是别的原因
2017年01月13日 07点01分
level 13
savage200 楼主
不知道有没有传形参的办法?
2017年01月13日 10点01分 6
level 13
savage200 楼主
找到原因了:c4的线程及时性不够,传入实参i在线程内转换不够及时,可能引发未知问题!需要给足够的时间转换或引入互斥!如果creat函数允许强制转换或传入形参,可避免类似问题!
2017年01月13日 10点01分 7
1