- 论坛徽章:
- 0
|
>> 2,传递多个参数的时候,创建线程的函数内malloc()一个结构体,把参数都放进去,然后传指针,线程函数结束时,在线程内部free();
关于传递多个参数, 一种比较通用的方法是为 pthread_create 做一次函数包装, 由包装函数完成一些繁锁的事情.
下面举例说明扩展成 3 个参数的例子, 之后调用 my_pthread_create() 即可处理多于一个参数的例子.
1. typedef void * (*FUNCALLBACK)(void * arg1, void * arg2, void * arg3);
2. typedef stuct {
3. FUNCALLBACK callback;
4. void * arg1;
5. void * arg2;
6. void * arg3;
7. } ARGS;
8.
9. void * sub_thread_entry(void * arg)
10. {
11. ARGS args;
12.
13. /* retrieve args */
14. args.callback = ((ARGS *)arg)->callback;
15. args.arg1 = ((ARGS *)arg)->arg1;
16. args.arg2 = ((ARGS *)arg)->arg2;
17. args.arg3 = ((ARGS *)arg)->arg3;
18. free(arg);
19.
20. return args.callback(args.arg1, args.arg2, args.arg3);
21. }
22.
23. int my_pthread_create(pthread_t *thread, const pthread_attr_t *attr,
24. FUNCALLBACK start_routine, void *arg1, void * arg2, void * arg3)
25. {
26. ARGS * args;
27.
28. if (NULL == (args=(ARGS *)malloc(sizeof(ARGS))))
29. return -1;
30.
31. /* push args into buffer */
32. args->callback = start_routine;
33. args->arg1 = arg1;
34. args->arg2 = arg2;
35. args->arg3 = arg3;
36.
37. return pthread_create(pthread, attr, sub_thread_entry, args);
38. }
复制代码
newzy 发表于 2010-07-13 19:28 ![]()
好华丽的方法,奈斯 |
|