int pthread_create (pthread_t *, __const pthread_attr_t *, void *(*__start_routine) (void *), void *);
我需要给线程执行的函数传递一个套接口描述字,这样一来很容易想到
pthread_create(&tid, NULL, &DoSomething, (void*)&connFd)
的方式,当然考虑到线程共享的问题,connFd传入线程后会是什么值就很郁闷了。
ptr = new int();
*ptr = accept(listenFd, (sockaddr*)&addr, &len);
pthread_create(&tid, NULL, &DoSomething, (void*)ptr);
而线程中取值则可以直接使用int connFd = *((int*)arg);这样的写法了。 //arg为执行函数形参
connFd = accept(listenfd, (sockaddr*)&addr, &len);
pthread_create(&tid, NULL, &DoSomething, (void*)connFd);
取值时直接使用int connFd = (int)arg;
int cast(void *arg)
{
int tmp;
memcpy(&tmp, (void *)&arg, 4); //这是最让我觉得它怪异的地方,本来把指针当作整型变量用了,要恢复就只能取地址,再加上参数是void*,这真是够整洁的。
return tmp;
}
折腾了几次,我还是在我的机器上老老实实用我的new吧,OMG,忘记回收内存了。。
PS:这里说的转换并不是真就把int当指针用,而只是取指针值本身&arg,但是它并未指向有意义的东西。