我是pthread的新手,试图使此代码正常工作,但是创建线程时遇到问题。
我仍然不明白如何使用具有结构对象(线程)的pthread_create()函数创建pthread,并且我在退出线程时遇到问题。我试图在我的主线程中创建3个线程,并通过他们正在使用向量进行处理的功能。
pthread_create with no arguments?
我已经检查了这个问题,并试图解决但无法解决
答案 0 :(得分:2)
您需要同时更改agency1
和agency2
的签名以匹配pthread_create
接受的功能类型
void* agency1(void*) { ... }
void* agency2(void*) { ... }
另外,转换错误是因为pthread_create
收到指向pthread_t
的指针,而您只传递了该类型的值,因此需要将其更改为:
at1 = pthread_create(&aT->agencyTread1, NULL, agency1, NULL);
at2 = pthread_create(&aT->agencyTread2, NULL, agency2, NULL);
mt = pthread_create(&mainThread, NULL, mainT, (void *)aT);
答案 1 :(得分:1)
与其他pthread
函数按值取pthread_t
的功能不同,pthread_create
取pthread_t*
(指针)的值。
您需要以下内容:
int errc;
pthread_t mainThread; /*...*/
if ( 0!=(errc=pthread_create(&mainThread, ...)))
throw errno_exception(errc); // { errno=errc; perror(0); /*...*/}