如何翻译以下代码(对于Windows),以便它也可以在Linux系统上使用?

时间:2013-04-11 17:58:48

标签: networking ubuntu client-server

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

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

1 个答案:

答案 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);
}
//...