我正在为一个学校项目工作,我认为我们可以在两个单独的项目中使用相同的代码。该代码实质上连接到主机上运行的套接字,该主机正在运行提供流量数据(x,y位置)的模拟器。这些位置被解析为一个结构:

struct Vehicle{
    Double x;
    Double y;
    int id;
    int type;
}


这些结构的列表将返回到实例化库的程序。因此,我想使用此代码,我必须解析数据并具有一个通用方法,该方法可以在每个事件(大约每1毫秒)发生之后将结构传递回调用方。我将如何去做呢?

更新:

我不清楚的部分是让库每x秒获取一次数据,然后将其传递给另一个相应更新的文件。因此,如果fileA是绘制位置的代码,并且fileB将数据解析为结构,那么我该如何通过将fileA中的数据传回来更新fileB方法中的canvas(相对于调用fileB中的某些方法来获取数据)。

最佳答案

我如何通过传递数据来更新fileA方法中的画布
  从fileB返回(与在fileB中调用某些方法来获取
  数据)。


每次在文件B中准备好数据时,文件B中的代码都需要调用文件A中的方法,然后使用被调用的方法将数据传递到文件A中。

可以硬编码(始终相同)被调用的fileA方法,或者在启动时fileA中的代码可以调用fileB方法,并在数据准备好时传递应该由fileB调用的函数-这称为“注册a打回来”

我不确定您将如何使用C进行处理(自从我使用该语言已经很多年了)。在C ++中,它是非常标准的,如下所示:

#include <iostream>
#include <functional>
#include <thread>         // std::this_thread::sleep_for
#include <chrono>         // std::chrono::seconds

using namespace std;

class B;

class A
{
public:

    // function that should be called when data is ready
    void Callback();

    void Register( B& theB );
};

class B
{
public:
    void RegisterCallback( function<void(void)> f );

    // method that runs whenever new data is ready
    void SendDataToA();

    function<void(void)> myCallback;
};

void A::Register( B& theB )
{
    theB.RegisterCallback( [this]()
    {
        Callback();
    } );
}

void A::Callback()
{
    // B has sent some data
    cout << "A::Callback\n";
}

void B::RegisterCallback( function<void(void)> f )
{
    myCallback = f;
}

void B::SendDataToA()
{
    while( 1 ) {
        std::this_thread::sleep_for (std::chrono::seconds(1));

        // data is ready, send it to A
        myCallback();
    }
}

int main()
{
    A theA;
    B theB;

    // register A's callback with B
    theA.Register( theB );

    // run B's data pump
    theB.SendDataToA();

    return 0;
}

10-08 03:56