即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

pthread_create线程相关函数

编程语言 wangzhida2008 11℃ 0评论
本文目录
[隐藏]

转自:http://blog.csdn.net/yeyuangen/article/details/6757525

 

#include

#include




using namespace std;





pthread_t thread;





void *fn(void *arg)


{


    int i = *(int *)arg;


    cout<<"i = "<




    return ((void *)0);


}





int main()


{


    int err1;


    int i=10;





    err1 = pthread_create(&thread, NULL, &fn, &i);


    pthread_join(thread, NULL);

}

————————————————————————————————

 

线程创建函数:


int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void * (*func)(void *), void *arg);


参数func 表示代一个参数void *,返回值也为void *;


对于void *arg,参数传入,在gcc 3.2.2条件下,以下面两种方式传入都可编译通过。


int ssock;


int TCPechod(int fd);


1.pthread_create(&th, &ta, (void *(*)(void *))TCPechod, (void *)ssock);


2.pthread_create(&th, &ta, (void *(*)(void *))&TCPechod, (void *)&ssock);








本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/9643/showart_49987.html

 

pthread_create(&tid,&attr,&func,(void)arg)只能传递一个参数给func,要是要传一个以上的参数呢?请指教

1.定义一个结构然后传这个结构 

 

pthread_create时,能否向thread_function传递多个参数?

CODE:
typedef union {


   size_t arg_cnt;


   any_possible_arg_types;


} arg_type;





arg_type args[ARG_NUM + 1];


args[0].arg_cnt = ARG_NUM;


args[1].xxx = …;





pthread_create (…, …, thread_function, &args[0]);

进去了自己解析。。

————————-

1.1.pthread_create 傳遞參數的用法

 

最近,又開始寫 socket 的程式. 


有別於以前用 select 或最早的 heavy-weight 的 fork 方式. 


這次改用 pthread 來 handle server 端所收到的 request . 


不過, 有一個問題, 如何傳參數給 thread 的 handler 


man pthread_create 可以看到只有 4th argument 可以應用. 


至於怎麼用. 找了以前的 sample code, 原來,做 casting 就可以.





string 沒問題, 如果是傳 integer 就這樣寫..





void pfunc ( void *data)


{


int i = (int)data;





}





main()


{


int ival=100;


pthread_t th;





pthread_create( &th, NULL, pfunc, (void *) ival );


}





如遇到多個參數. 就包成 struct , 傳 pointer 過去吧 ~ 





struct test


{


int no;


char name[80];


};





void pfunc ( void *data)


{


struct test tt = (struct test*)data;





}





main()


{


struct test itest;


pthread_t th;





itest.no=100;


strcpy(itest.name,”Hello”);





pthread_create( &th, NULL, pfunc, (void *)& itest );


..


}


——————————————————————————————————

http://blog.csdn.net/liangxanhai/article/details/7767430

———————————–

转载请注明:CodingBlog » pthread_create线程相关函数

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情