У меня проблема с созданием потоков с помощью Pthread. Я думаю, что кто-то может справиться с проблемой. Мой код выглядит следующим образом. Я показываю только часть из-за ограничения пространства.Возврат кода из pthread create is 11
Main.c create Detectdirection instance and send to the function.
d = new Detectdirection();
while(run)
{
int ret = d->run_parallel(d);
if(ret == -1)
run = false;
}
My Detectdirection Class имеет две функции для параллельной работы.
class Detectdirection{
public:
int run_parallel(void*p);
void *Tracking(void *p);
static void *Tracking_helper(void * p);
void *ReadImage(void *p);
static void *ReadImage_helper(void *p);
private:
pthread_t thread[2];
}
void *Detectdirection::ReadImage(void *p){
Detectdirection *app = (Detectdirection*)p;
while(run){
}
pthread_exit(NULL);
}
void *Detectdirection::Tracking(void *p){
Detectdirection *app = (Detectdirection*)p;
while(run){
}
pthread_exit(NULL);
}
void *Detectdirection::Tracking_helper(void *p){
Detectdirection *app = (Detectdirection*)p;
return ((Detectdirection*)p)->Tracking(app);
}
void *Detectdirection::ReadImage_helper(void *p){
Detectdirection *app = (Detectdirection*)p;
return ((Detectdirection*)p)->ReadImage(app);
}
int Detectdirection::run_parallel(void* p){
Detectdirection *app = (Detectdirection*)p;
int rc = pthread_create(&thread[0], NULL, app->ReadImage_helper, app);
if (rc) {
printf("ERROR; return code from pthread_create() is %d\n", rc);
return -1;
}
rc = pthread_create(&thread[1], NULL, app->Tracking_helper, app);
if (rc) {
printf("ERROR; return code from pthread_create() is %d\n", rc);
return -1;
}
return 0;
}
Компиляция в порядке, и когда я запустил, у меня возникла ошибка создания потока. Такой тип возвращаемого типа 11 происходит только при создании многих потоков. Но теперь я создаю только два потока, и у меня есть эта ошибка. Что может быть неправильным?
Да, у меня есть ошибка в Main, и я не должен использовать цикл while. Это создаст много потоков. – batuman