2013-02-25 115 views
0

我试图做一个使用SDL窗口的程序,这个窗口是通过一个对象来调用的,该对象将包含在窗口上做的功能。在SDL窗口打开的情况下获取终端输入?

我遇到的问题是我想通过终端进行输入,终端又会调用完成对象的命令。

我试过使用多线程,但我发现我需要在SDL主线和SDL线程中的类实例,一种解决这个问题的方法是全局类实例,但我认为这会很糟糕节目。

是否有任何其他的方式来拥有SDL窗口打开,做的事情,如C在终端窗口

回答

0

这是很好的做法,使辅助线程尽可能简单的I/O的目的之内。让主线程处理所有逻辑,并创建一个将值推送到互斥堆栈的线程。然后主线程可以弹出堆栈中的任何值并对其做出相应的反应。由于您使用的是控制台,因此无法使用并发输入,因此不需要堆栈。这是一个简单的例子。虽然我在这台电脑上没有工作工具链,但这似乎应该起作用。

#include<string> 
#include<sdl/sdl.h> 
#undef main //I HATE SDL FOR REDEFINING MAIN 

class asynccin{ 
    static std::string val; 
    static int hasval; 
    static void thread(void*a){ 
     cin >> val; 
     hasval = 2; 
    } 
    public: 
    static bool begininput(){ 
     if(hasval != 0) return false; 
     hasval = 1; 
     SDL_CreateThread(thread, NULL); 
    } 
    static bool hasinput(){ 
     return hasval == 2; 
    } 
    static std::string reapinput(){ 
     hasval = false; 
     return val; 
    } 
}; 

int main{}{ 

    //init SDL 
    while(true){ 
     //loop stuff 
     asynccin::begininput(); 
     if(asynccin::hasinput()){ 
      cout << asynccin::reapinput(); 
     } 
    } 
} 
+0

嗯,我想我要尝试的是,似乎是我很难做我想做的,而无需很长的代码 – Silenced 2013-02-25 19:44:27

+0

有你的一个例子做。 – Kaslai 2013-02-25 20:05:40

相关问题