2013-02-25 198 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

相關問題