C ++从'pthread_t'到'pthread_t * {aka long unsigned int}''到'pthread_t *

时间:2018-10-28 19:44:55

标签: c++ pthreads

我是pthread的新手,试图使此代码正常工作,但是创建线程时遇到问题。

我仍然不明白如何使用具有结构对象(线程)的pthread_create()函数创建pthread,并且我在退出线程时遇到问题。我试图在我的主线程中创建3个线程,并通过他们正在使用向量进行处理的功能。

pthread_create with no arguments?

我已经检查了这个问题,并试图解决但无法解决

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要同时更改agency1agency2的签名以匹配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_createpthread_t*(指针)的值。

您需要以下内容:

int errc;
pthread_t mainThread; /*...*/
if ( 0!=(errc=pthread_create(&mainThread, ...))) 
    throw errno_exception(errc); // { errno=errc; perror(0); /*...*/}