首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

C高手,线程和函数指针的有关问题

2012-04-09 
求助C高手,线程和函数指针的问题。C/C++ code/*program 1*/void thread1(){int ifor(i0i100i++){print

求助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才是乱序的。

热点排行