我在下面发布的代码主要用于从软件获取(连续流数据)并在收到数据时显示该数据。我面临的问题是,该软件(已经有“服务器”)在Windows上,但我需要在运行Linux(Ubuntu)的单独系统上获取数据。
任何人都可以指导我,我需要对代码进行哪些更改才能使其在Linux上运行?
此外,由于他们通过网络进行“通信”,因此 指向 的代码是否会对Windows计算机上的服务器进行任何更改? (我很抱歉这个术语,我对此有点新意,所以如果我弄错的话请纠正我)
#include "vrpn_Connection.h" // Missing this file? Get the latest VRPN distro at
#include "vrpn_Tracker.h" // ftp://ftp.cs.unc.edu/pub/packages/GRIP/vrpn
#include "conio.h" // for kbhit()
//== Callback prototype ==--
void VRPN_CALLBACK handle_pos (void *, const vrpn_TRACKERCB t);
//== Main entry point ==--
int main(int argc, char* argv[])
{
vrpn_Connection *connection;
char connectionName[128];
int port = 3883;
sprintf(connectionName,"localhost:%d", port);
connection = vrpn_get_connection_by_name(connectionName);
vrpn_Tracker_Remote *tracker = new vrpn_Tracker_Remote("Tracker", connection);
tracker->register_change_handler(NULL, handle_pos);
while(!kbhit())
{
tracker->mainloop();
connection->mainloop();
Sleep(5);
}
return 0;
}
//== Position/Orientation Callback ==--
void VRPN_CALLBACK handle_pos (void *, const vrpn_TRACKERCB t)
{
printf("Tracker Position:(%.4f,%.4f,%.4f) Orientation:(%.2f,%.2f,%.2f,%.2f)\n",
t.pos[0], t.pos[1], t.pos[2],
t.quat[0], t.quat[1], t.quat[2], t.quat[3]);
}
如果有人能提出一个“更容易”的替代方案,我将不胜感激。谢谢!
答案 0 :(得分:0)
kbhit()和Sleep()函数是Windows独有的。
这里你真的不需要kbhit功能。你可以使用无限循环。
对于sleep方法,您可以使用此线程中的以下代码: Sleep function in C++
#ifdef _WIN32
#include <windows.h>
void sleep(unsigned milliseconds)
{
Sleep(milliseconds);
}
#else
#include <unistd.h>
void sleep(unsigned milliseconds)
{
usleep(milliseconds * 1000); // takes microseconds
}
#endif
But a much simpler method is to use boost::this_thread::sleep.
此代码应适用于Linux和Windows。
//...
while(1)
{
tracker->mainloop();
connection->mainloop();
sleep(5000);
}
//...