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