我正在为一个学校项目工作,我认为我们可以在两个单独的项目中使用相同的代码。该代码实质上连接到主机上运行的套接字,该主机正在运行提供流量数据(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;
}