2012-01-11 2 views
1

저는 void WaitForMouseDown()void WaitForMouseUp()의 기능을 가진 C++ 그래픽 라이브러리를 사용하고 있습니다. WaitForMouseDown 함수는 마우스 버튼을 눌렀다가 다시 돌아올 때까지 대기합니다. WaitForMouseUp은 단추가 해제 될 때까지 대기합니다. bool isMouseDown() 라이브러리에 또 다른 기능이 있는데, 마우스 버튼이 현재 작동 중지 된 경우 true을 반환합니다.함수가 반환 될 때까지 루핑을 유지하는 방법은 무엇입니까?

이제 사용자가 처음 클릭 할 때 루프에서 작업을 시작하고 사용자가 두 번째로 마우스를 누를 때까지 루핑을 계속해야합니다.

다음 방법을 시도했지만 두 번째 클릭 후 프로그램이 충돌합니다. 어떤 생각, 내가 뭘 잘못하고있는거야?

int main(){ 
    WaitForMouseUp(); 
    while(!isMouseDown()){ 
     //do something 
    } 
    return 0; 
} 
+2

이 어떻게 충돌 않습니다해야한다고 생각? 어떤 메시지를 얻습니까? 그리고 당신은 마우스 루틴보다는 충돌을하는'do something' 부분 자체가 아닌지 확신합니까? –

+0

xcode 콘솔과 그래픽 창이 모두 멈 춥니 다. 나는 어떤 오류 메시지도받지 못한다. 나는 네가 옳다고 생각한다.'do something'을 주석 처리하면 잘 동작한다. 반면에,'do something' 코드는 사용자가 두 번째 클릭을 할 때까지는 잘 돌아 간다. –

+0

루프에서 수면 추가를 시도한 적이 있습니까? 수면 (100)처럼. 그냥 제안! –

답변

3

//do something는 시스템 이벤트를 윈도에 작용하는 폴링에게 마우스가 포함되어 있지 않은 경우 (즉, 라이브러리에는 전화), 여기에 명백한 무한 루프가있어이 : isMouseDown 항상 true을 반환하지 않습니다 때문에 그 것이다 이벤트 이벤트 대기열에서 false이 잠자기 상태가되도록 설정하십시오.

+0

정확하게 이해한다면 잘 모르겠습니다. 'isMouseDown'은 항상'false'가 아니기 때문에 루프가 계속 실행됩니다. 이제 두 번째 클릭을하면 'isMouseDown'이 'true'가되고 따라서 루프 조건 인! isMouseDown은 'false'가되어 루프가 중단됩니다. 내가 '무언가를해라'라고 말하면 절대적으로 잘 작동합니다. –

+0

@stressed_geek : 예, 그렇지만'isMouseDown'는 마술처럼'true'가 아니며 GUI 라이브러리가 마우스 이벤트를 처리 할 때 그렇게됩니다. 이것은 병렬 스레드에서 할 수 있지만 대부분의 프레임 워크에서는'process_pending_events()'를 호출하는 것과 같은 것이 필요합니다. – thiton

0

가 나는

int main() 
{ 
    WaitForMouseUp(); 
    bool done = false; 
    while(!done) { 
    //do something 
    done = isMouseDown(); 
    } 
+1

'do {// do something} while (! isMouseDown());과 동등합니다. – thiton

관련 문제