2013-06-04 4 views
-2

나는 프로그램이 내 함수 중 하나에 도착할 때 실제로 C++ Qt.in에 의해 쓰고있는 프로그램에서 잠시 멈추고 싶다. 예를 들어 5 초 동안 멈추고 다음 lines.what을 계속해야한다. 해야 할 것?몇 초 동안 프로그램을 일시 중지하는 방법은 무엇입니까?

그 함수는 클래스의 멤버 함수이고 나는 당신이 정말 당신이 몇 가지 옵션
을 가지고 있다고해야 할 경우

+0

메인 스레드 또는 작업자 스레드에 있습니까? – RobbieE

+0

이것을 달성하고자하는 이유를 자세히 설명해 주시겠습니까? 나는 그들에게 내가이 work.that 필요 일부 초 동안 먹고 말을 아끼지 않겠습니다 "철학자 문제의 식사"의 솔루션을 쓰고 있어요 – Kcvin

+0

클래스의 각 인스턴스가 하나 내 "철학자 수업"의 인스턴스는 몇 초 동안 먹습니다 (잠시 멈춤) –

답변

4

:

는 QT4와
QMutex mut; 
mut.lock(); 
mut.tryLock(milliseconds); 
mut.unlock(); // I am not sure if this is a necessity 

당신이 뮤텍스에 QWaitCondition::wait()을 사용할 수 있습니다;

인터페이스 스레드에 있으면 간격이 ellapses 때까지 gui가 고정됩니다.

+0

완벽한 답변을 주셔서 대단히 감사드립니다 ... –

5

... 클래스의 각 인스턴스에 대해 (일시 중지) 그 일 O를 원하는 당신은 (그것은 일반적으로 나쁜 생각 때문에 사람들은 보호)

을 QThread을 상속하고 공개함으로써 QThread'ssleep 방법을 사용할 수 있습니다 또는 당신은 QTimer과 함께 QEventLoopexec를 사용할 수 있습니다. 타이머의 신호를 QEventLoop의 quit() 슬롯에 연결하십시오. 이렇게하면 "비 차단"대기가 발생하여 앱이 멈추지 않습니다.

아니면 대신, 두 가지 방법으로 코드를 분할 두 번째 하나 slot하고

편집 적합한 타이머를 호출해야합니다 : 당신이 finishEating 슬롯을 호출하는 QTimer::singleShot를 사용하여 먹는 방법, 뭔가 같은 X 초 후에
당신은이 부분을 읽어보십시오 : 당신은 다음과 같은 트릭을 사용할 수 있습니다 Qt5를 사용하는 경우 http://qt-project.org/doc/qt-5.0/qtcore/thread-basics.html

+0

감사합니다 ... 도움이되었습니다 –

관련 문제