2012-05-25 2 views
0

라이브러리 (DLL)를 작성했습니다. Java 코드는 JNA에서 내 DLL을 사용합니다. 라이브러리에서 QThread 파생 클래스에 "new"로 Qtimer를 만듭니다.비 Qt DLL (JNA)에서 QTimer 사용

, 나는 다음과 같은 오류가 있습니다

ERROR: QTimer can only be used with threads started with QThread 

가 어떻게 제대로의 QApplication/QCoreApplication없이 비 Qt는 스레드에서 호출 할 QTimer를 사용해야을?

+0

확실한 대답은 당신이 할 수 없다는 것입니다 ...하지만 만약 당신이 나를 믿지 않는다면 여기를 읽으십시오. http://stackoverflow.com/questions/7450044/qtimer-can-only-be-used-with-threads -started-with-qthread – alegen

+0

그러나 QCoreApplication이 없습니다. QCoreApplication 인스턴스를 만들어야합니까? – legotron

+1

링크에서 인용 한 내용 : "QTimer를 사용하려면 이벤트 루프가 있어야합니다. QCoreApplication :: exec()를 사용하여 응용 프로그램 이벤트 루프를 시작해야합니다." – alegen

답변

0

QBasicTimer을 살펴보십시오. 100 % 확신 할 수는 없지만 최소한 설명서에는 QTimer 클래스의 설명서와 달리 QThread 및 이벤트 루프가 전혀 언급되어 있지 않습니다.

단점은 좀 더 복잡하다는 것입니다 (신호 슬롯 연결이없고 QObjecttimerEvent() 재 구현이 호출 됨). 그러나 사실이라면 이벤트 루프없이 사용할 수 있습니다.

1

불행히도 QTimer는 내가 아는 한 QCoreApplication이 필요합니다. 또한 QCoreApplication은 내가 본 첫 번째 QObject를 생성하는 스레드에서 인스턴스화되어야합니다. 내가 한 것은 QtConcurrent::run을 사용하여 생성 된 QCoreApplication 인스턴스를 새 스레드로 인스턴스화하고 거기에 내 QObject를 인스턴스화했습니다. 나는 평범한 예제 here을보고했다. QTimer가 올바르게 작동하는 것 같습니다.