求助C高手,线程和函数指针的问题。
C/C++ code
/*program 1*/
void thread1()
{
int i;
for(i=0;i<100;i++)
{
printf("%s",thread1);
sleep(1);
}
}
void thread2()
{
int i;
for(i=0;i<100;i++)
{
printf("%s",thread2);
sleep(2);
}
}
void main()
{
int ret1,ret2;
pthread_t id1,id2;
int i;
ret1 = pthread_create( &id1, NULL, (void *)thread1, NULL);
ret1 = pthread_create( &id1, NULL, (void *)thread1, NULL);
for(i=0;i<100;i++)
{
printf("%s",thread3);
sleep(3);
}
pthread_join(id1,NULL);
pthread_join(id2,NULL);
pthread_cancel(id1);
pthread_cancel(id2);
}
/*program 2*/
void thread1(void (*thr)())
{
int i;
for(i=0;i<100;i++)
{
printf("%s",thread1);
sleep(1);
}
thr();
}
void thread2()
{
int i;
for(i=0;i<100;i++)
{
printf("%s",thread2);
sleep(2);
}
}
void main()
{
int ret1;
pthread_t id1;
int i;
ret1 = pthread_create( &id1, NULL, (void *)thread1(thread2), NULL);
for(i=0;i<100;i++)
{
printf("%s",thread3);
sleep(3);
}
pthread_join(id1,NULL);
pthread_cancel(id1);
}
项目中的问题!
源程序比较多,不方便贴出来。
类似上面两端代码,求助高手看看这个两段代码有什么区别。
程序结果不同,program1结果,thread1,thread2,thread3交替输出,program2结果,thread1和thread2输出后,thread3才输出。
我要以第二种方式实现,得到第一种的结果。
------解决方案--------------------
名称
pthread_create() - 创建新的执行线程。
概要
#include <pthread.h>
int pthread_create(
pthread_t *__restrict thread,
const pthread_attr_t *__restrict attr,
void *(*start_routine)(void *),
void *__restrict arg
);
参数
thread 指向要返回已创建线程的ID 的位置的指针。
attr 指向描述已创建线程的特性的线程属性对象的指针。如果该值为NULL ,则使用缺省的属
性。
start_routine
新建线程要执行的函数。
arg 要传递给已创建线程的start_routine 的参数
返回值
成功完成后, pthread_create() 将返回零。否则,将返回错误编号以指明错误(不设置errno 变量)。
------解决方案--------------------LS正解,man pthread_create上有说,第四个参数是要线程函数的参数,第三个参数只能是线程函数的指针,不能带参(指针不能带参数的说,哈哈)
------解决方案--------------------学东西
------解决方案--------------------2楼把该说的都说了~
------解决方案--------------------学习了。
------解决方案--------------------你的程序写的太混乱的,
void thread2()
{
int i;
for(i=0;i<100;i++)
{
printf("%s",thread2);
sleep(2);
}
}
在printf中的thread2,你是想输出函数地址吗?
用%s,输出是错误的。
还有就是,按你program1,写的线程的结构,应该是按顺序输出的,而program2才是乱序的。