#include <pthread.h>
class Controller{
private:
int x;
int y;
public:
void Run();
int getX(){return x;};
int getY(){return y;};
int getXSpeed(){return xSpeed;};
int getYSpeed(){return ySpeed;};
void setLocation(int x2, int y2);
};
class AutomaticControl {
private:
int lastX;
int lastY;
Controller contr;
public:
AutomaticControl(Controller controller){
contr = controller;
}
void *Run(void);
static void *Run_helper(void *context){return ((AutomaticControl *)context)->Run();};
};
class Ballsearch {
private:
Controller contr;
public:
Ballsearch(Controller controller){
contr = controller;
};
void *Run();
static void *Run_helper(void *context){return ((Ballsearch *)context)->Run();};
};
在我的头文件中提到了三个类:Controller AutomaticControl和Ballsearch。 现在我想创建两个线程:ballsearch.Run()和AutomaticControl.Run() 我在下面的代码中创建了它。 这有效。 我在ballsearch funktion Run()中使用控制器对象。这会改变x和y。 我做完这个之后。还有一个其他线程处于活动状态AutomaticControl Run()函数。 它也使用带有getX()和getY()的控制器对象。 如果我在AutmaticControl中使用它,则没有我期望的值。应该有球搜索函数Run()中提到的值。 我该如何解决这个问题。
以下是cpp中的完整代码:
#include "Header.h"
using namespace std;
using namespace cv;
Controller contr1;
Ballsearch ballsearch(contr1);
AutomaticControl automaticcontr (contr1);
int main(int argc, char *argv[])
{
Controller contrl;
contrl.Run();
return 0;
}
void Controller::Run(){
pthread_t thread1;
pthread_t thread2;
pthread_create(&thread1,NULL,&Ballsearch::Run_helper,&ballsearch); // &ballsearch
pthread_create(&thread2,NULL,&AutomaticControl::Run_helper,&automaticcontr); //&automaticcontr
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
cout << "hello"<<endl;
}
void Controller::setLocation(int x2, int y2){
x = x2;
y = y2;
cout << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl;
cout << " x-Position: " << x <<" y -Position: " << y <<endl;
cout << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl;
}
void *Ballsearch::Run() {
cout << "ballsearch run" << endl;
contr.setLocation(20,30);
delay(3000);
}
void *AutomaticControl::Run() {
cout << "AutomaticControl run " << endl;
cout << "* Start Automatic Control *" << endl;
delay(1000);
lastX = contr.getX();
lastY = contr.getY();
cout << "-------------------------------------------------------------" << endl;
cout << " contr.getX() " << lastX << " contr.getY() " << lastY <<endl;
cout << "-------------------------------------------------------------" << endl;
}
答案 0 :(得分:0)
我发现了我的错误:
我改变了这个:
Ballsearch中的contr->setLocation
。
然后我改变了这个:
Controller * contr;
AutomaticControl(Controller &controller){
contr = &controller;
}
自动控制和Ballsearch中的。
然后我改变了这个:
Ballsearch ballsearch(*this);
AutomaticControl automaticcontr(*this);
在Controller :: Run()函数中;
Controller::Run()
功能包括ptread_create