Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中通过函数调用线程更改对象属性+;_C++_Multithreading_Class_Object_Methods - Fatal编程技术网

C++ 在C+;中通过函数调用线程更改对象属性+;

C++ 在C+;中通过函数调用线程更改对象属性+;,c++,multithreading,class,object,methods,C++,Multithreading,Class,Object,Methods,如何更改av1的属性,使其不在线程内调用方法?C++中,编译器是正常的,但在运行时会产生致命错误。 #include <iostream> #include<thread> using namespace std; class Airplane{ public: int vel = 0; Airplane *air1; void change_av1(){ air1->vel = 3; cout &l

如何更改
av1
的属性,使其不在线程内调用方法?C++中,编译器是正常的,但在运行时会产生致命错误。
#include <iostream>
#include<thread>

using namespace std;

class Airplane{

public:
    int vel = 0;

    Airplane *air1;

    void change_av1(){
        air1->vel = 3;
        cout << air1->vel << endl;
        system("pause");
    }
};

void myFunction();

 int main(){

    Airplane *air1=new Airplane();

        myFunction();

    return 0;
}

void myFunction(){

     Airplane *object=new Airplane();

    thread first(&Airplane::change_av1, object); // meu método dentro da thread

    first.join();
}
#包括
#包括
使用名称空间std;
等级飞机{
公众:
int-vel=0;
飞机*air1;
无效更改_av1(){
air1->vel=3;

cout vel您的代码完全错误。它应该看起来更像这样:

#include <iostream>
#include <thread>
using namespace std;

class Airplane{
public:
    int vel = 0;

    void change_vel(){
        vel = 3;
        cout << vel << endl;
    }
};

void myFunction();

int main(){
    myFunction();
    system("pause");
    return 0;
}

void myFunction(){
    Airplane *object = new Airplane;
    thread first(&Airplane::change_vel, object);
    first.join();
    delete object;
}
#包括
#包括
使用名称空间std;
等级飞机{
公众:
int-vel=0;
无效更改级别(){
vel=3;

在我使用的库中,对象是在类中声明的。而且,当一个线程中发生许多事情时,我只需要它,更改某些对象的属性。然后,我可能是错的……但是,我只需要这样做,通过一个在线程内调用的函数来更改对象的属性……”我只需要它,更改某些对象的属性。”-你知道当其他线程同时访问相同的数据时,如果你这样做会发生什么吗?是的,我有想法。谢谢。但是,在我的应用程序中,这一点非常重要。也许,我从某种角度看情况是错的。如果有人能给出其他方法或解决方案……但是,线程内部发生的事情,会改变一个对象的方面…“是的,我有想法”-这个想法是什么?“线程内部发生的事情”-但如果你不是某种量子物理程序员,事情是可以预测的。你只需要处理选项。现代操作系统:es帮助你同步事件。你的
main
air1=新飞机()
-但是你的
删除在哪里?不要手动管理内存!