0
我试图做一个使用SDL窗口的程序,这个窗口是通过一个对象来调用的,该对象将包含在窗口上做的功能。在SDL窗口打开的情况下获取终端输入?
我遇到的问题是我想通过终端进行输入,终端又会调用完成对象的命令。
我试过使用多线程,但我发现我需要在SDL主线和SDL线程中的类实例,一种解决这个问题的方法是全局类实例,但我认为这会很糟糕节目。
是否有任何其他的方式来拥有SDL窗口打开,做的事情,如C在终端窗口
我试图做一个使用SDL窗口的程序,这个窗口是通过一个对象来调用的,该对象将包含在窗口上做的功能。在SDL窗口打开的情况下获取终端输入?
我遇到的问题是我想通过终端进行输入,终端又会调用完成对象的命令。
我试过使用多线程,但我发现我需要在SDL主线和SDL线程中的类实例,一种解决这个问题的方法是全局类实例,但我认为这会很糟糕节目。
是否有任何其他的方式来拥有SDL窗口打开,做的事情,如C在终端窗口
这是很好的做法,使辅助线程尽可能简单的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();
}
}
}
嗯,我想我要尝试的是,似乎是我很难做我想做的,而无需很长的代码 – Silenced 2013-02-25 19:44:27
有你的一个例子做。 – Kaslai 2013-02-25 20:05:40