0

我在下面发布的代码基本上用于从软件获取(连续流数据)并在接收到数据时显示该数据。我面临的问题是,软件(已经有“服务器”)在 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]);
}

如果有人能提出一个“更简单”的替代方案,我将不胜感激。谢谢!

4

1 回答 1

0

kbhit() 和 Sleep() 函数是 Windows 独有的。

在这里,您实际上并不需要 kbhit 功能。您可以改用无限循环。

对于睡眠方法,您可以使用此线程中的此代码: 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);
}
//...
于 2013-05-03T16:23:38.777 回答