2017-11-06 2 views
0

이벤트 구동 프로그래밍을 사용하여 서버와 클라이언트를 프로그래밍해야합니다. 우리는 select(2)을 사용하여 stdin과 소켓에서 읽습니다. 나는 SDL2와 SDL2_TTF 라이브러리를 사용하는 클라이언트를위한 인터페이스를 만들고있다. 문제는 클라이언트를 내 인터페이스에 연결할 수 없으므로 select(2)을 SDL 텍스트 입력 이벤트로 작동시키는 방법을 모르겠다는 것입니다. 어떻게해야합니까? SDL 창에서 입력 내용을 볼 수있는 파일 설명자가 있습니까? select (2)를 사용하여 SDL 텍스트 입력 이벤트를 볼 수 있습니까?

내가 얘기를 깜빡 했네요 : 우리가 select(2)

+0

질문에 대한 코드를 제공해 주시겠습니까? –

+0

예! 클라이언트를 위해 사용하는 _while_은 https://codepaste.net/ukxfdt입니다. – liara

답변

0

SDL 당신이 이벤트를 폴링하는 방법

while (!quitting) { 
pollEvents(); 
drawEverything(); 
delayForFPS(); 
} 

같이 루프를 원하는 기본적 것이다 이렇게 처리 폴링 기반 이벤트를 가지고 사용하는이 및 텍스트 입력 이벤트를 관리하는 방법은 this one 또는 here과 같이 SDL 튜토리얼에서 어디에서나 설명 할 수 있지만 기본적으로는 다음과 같습니다.

SDL_Event event; 
if (SDL_PollEvent(&event)) { 
    if (event.type == SDL_TEXTINPUT) { 
    std::string text = event.text.text; 
    } 
} 

stdin 또는 select이 전혀 포함되어 있지 않습니다.

네트워킹 기능이 필요하기 때문에 상기 루프에는 pollForPendingPackets()dispatchPackets() 단계가 포함될 수 있습니다.

네트워킹 스레드가 모든 패킷을 받고이를 버퍼에 대기시킨 다음 SDL 스레드가 처리하도록하는 것이 좋습니다.

+0

할당이 sys/types.h에서 select를 사용하도록 명시 적으로 언급 했으므로 깜빡 했으므로 사용해야합니다. – liara

+0

실제로 사용하게됩니다. 'stdin'을 처리하지 말고 소켓을 관리하기 위해'select'를 사용하십시오. – Jack

1

SDL 창에서 입력을 볼 수있는 파일 설명자가 있습니까?

아니요. 가장 좋은 방법은 SDL_GetWindowWMInfo() & SDL_SysWMinfo struct을 통해 플랫폼 별 윈도우 핸들을 얻는 것입니다.

x11.displayselect(2)ConnectionNumber()을 사용할 수는 있지만 실제로는 X11에만 해당됩니다.

어떻게해야합니까?

메인/GUI/SDL 스레드가 네트워크 스레드는 select(2)가이야 로컬 소켓 write(2)를 통해 네트워킹 스레드에 메시지를 보내. 네트워크 스레드에서 주 스레드로 통신하려면 을 사용자 지정 이벤트와 함께 사용하여 SDL_WaitEvent()을 깨울 수 있습니다.

관련 문제