2014-04-28 2 views
2

루아에서 curses 프로그램을 작성하려고합니다. (대부분 C 언어로 포팅하기 전에 개발이 쉽기 때문입니다.) 사용자가 명령을 보낼 준비가 끊임없이 필요하지만 타이머의 만료와 같은 다른 신호를 처리 할 수 ​​있기를 원합니다. 이것에 대한 예제 사용은 사용자가 너무 오래 걸리는 경우 사용자를 잔소리하게하고, 네트워크를 통해 수신 된 메시지를 인쇄하는 것입니다.블로킹 액션을 기다리는 동안 무언가를하십시오.

curses.getch()을 호출하면 프로그램은 다음 명령을 실행하기 전에 데이터를 반환 할 때까지 기다립니다. 키를 누르기 전에 다른 이벤트가 발생하면 스크립트는이를 변경하기 위해 다른 조치가 취해지지 않으면 스크립트에 반응 할 수 없습니다.

curses.halfdelay()을 사용하여 잠시 후에 curses.getch()을 종료하려고 시도했지만 다른 것을 다시 호출하기 전에 수행 할 수 있지만 이상한 오류가 발생했습니다. 나는 또한 pthreads를 사용하는 방법을 배웠다고 생각했지만 어디서부터 시작해야할지 모른다. 나는 리눅스를 사용하고 있는데, 이미 curses를 사용하고 있기 때문에 솔루션이 Windows에서 작동하지 않는다고해도 괜찮다.

EDIT : 저주와 관련된 많은 세부 정보를 제공하여 사람들을 오도 할 수도 있지만 다른 차단 작업과 함께 사용할 수있는보다 일반적인 솔루션을 선호합니다.

+0

어떤 luacurses를 사용하고 계십니까? 이 라이브러리는 아주 오래된 것 같습니다. 당신은 현대적인 ncurses dll에 대해 그것을 구축하고 있습니까? – Schollii

+0

@Schollii Linux를 실행 중이고 Windows를 신경 쓰지 않아도 DLL을 사용하여 빌드하는 이유는 무엇입니까? 그 문제는 제쳐두고, 나는 솔직히 내가 사용하는 버전을 정확하게 알지 못한다. 우분투 저장소에 있으며 루아 5.1만을 지원합니다. – Wutaz

+0

이 문맥에서는 구별이 분명히 부적절합니다. – Schollii

답변

2

halfdelay() (더 일반적으로) nodelay()은 저주 공간에서 올바른 해결책입니다. 나는 그들이 일반적인 경우에 일한다는 것을 당신에게 확신시킬 수 있습니다. 당신은 당신의 "이상한 오류들"에 대해 더 구체적이어야합니다. 그것은 순수한 저주의 해결책이 아니다 (그리고 PDCurses 작동하지 않습니다)하지만

한편, 사람들은 때때로 중 하나 저주 또는 네트워크 소켓에서 입력을 기다리는,이 상황에서 select()를 사용합니다.

+0

'nodelay()'는 LuaCurses (또는 겉으로는 ncurses)에 의해 제공되지 않았으므로,'select()'로 무엇을 의미하는지 모르겠습니다. (Lua의'select()'함수는 확실히 여기에 적용되지 않습니다.),'halfdelay()'는 내가 할 수 있다고해도 이상적인 해결책은 아니다. 내가 얻은 오류는 바인딩의 타이머 만료 처리와 관련이있는 것으로 보입니다. – Wutaz

관련 문제