2013-02-25 2 views
0

SDL 창을 사용하는 프로그램을 만들려고하는데이 창은 창에서 수행 할 함수가 포함될 개체를 통해 호출됩니다.SDL 윈도우가 열린 상태에서 터미널 입력 받기?

내가 겪고있는 문제는 터미널을 통해 입력을 받아서 객체를 완료하라는 명령을 호출한다는 것입니다.

멀티 스레딩을 사용해 보았지만 메인 클래스와 SDL 스레드에서 모두 인스턴스가 필요하다는 것을 발견했습니다.이 문제를 해결하기위한 방법은 글로벌 클래스 인스턴스가 될 것이지만 이것이 좋지 않을 것이라고 생각합니다. 프로그램 작성.

SDL 윈도우가 열려 및 터미널 창

답변

0

그것은 가능한 한 간단하게 I/O 용으로 보조 스레드를 만들 수있는 좋은 방법입니다 내 CIN 같은 일을하는 다른 방법이 있나요. 주 스레드가 모든 논리를 처리하게하고 값을 상호 배제 된 스택에 푸시하는 스레드를 만듭니다. 그러면 주 스레드가 스택에서 모든 값을 팝하여 그에 따라 반응 할 수 있습니다. 콘솔로 작업 중이므로 동시에 입력 할 수 없으므로 스택이 필요하지 않습니다. 다음은 간단한 예입니다. 이 컴퓨터에는 작동하는 툴체인이 없지만 작동해야하는 것처럼 보입니다.

#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

+0

을하지 않고하고 싶은 일을하기 어려울 것으로 보인다. – Kaslai

관련 문제