【发布时间】:2021-09-19 01:49:35
【问题描述】:
我认为通过我的代码,我将对象的地址交给了线程。 但是我无法直接访问该对象(args.getTerminationStatus)。
不幸的是,我只复制了传递的对象,因此属性的更改无效(while 循环一直在运行,即使 getTerminationStatus() 后面的属性在外部发生了变化)。如果你有一些想法会很好。提前致谢。
int main(){
Sensors barometer(1, "Barometer", 0); //ID, Description, Value
pthread_t t1;
int ret1;
ret1 = pthread_create(&t1, NULL, &barometerThread, &barometer); //Hand over object to thread
if(ret1 != 0){
cout << "Error: Thread 1 (Luftdruckmesser) konnte nicht erstellt werden." << endl;
return 1;
}
sleep(10);
barometer.finish(); // Sets TerminationStatus to true
void *barometerThread(void *args){
Sensors dev = *(Sensors *) (args); // I think this is just a copy of that passed object
cout << "Luftdruck-Thread gestartet. Device-ID: " << dev.getID() << " Descr.: " << dev.getDescription() << " Value: " << dev.getValue() << endl;
while (!dev.getTerminationStatus()){
cout << "Still in loop: " << dev.getTerminationStatus() << endl;
sleep(1);
}
pthread_exit(0);
}
【问题讨论】:
-
您不使用
std::thread的原因是什么? -
ot:您的
barometerThread缺少return,这是未定义的行为 -
错误似乎来自不同的代码。错误消息抱怨
args.getID()但在您的代码中您有正确的dev.getID() -
哦哦。我知道了。请发布实际存在您问题的错误的代码代码。 cmets中的代码很容易被忽略,不会产生编译错误
-
@user2864740 OP 正在谈论他们在正文中制作的副本