Win CE Event in Qt-Eventqueue einreihen
Win CE Event in Qt-Eventqueue einreihen
Hallo,
ich bin noch realitiv in der Qt-Materie, habe aber schon das erste große Problem.
Ich schreibe eine Qt-Konsolenanwendung die Daten und Event seines WinCE-Dienst empfängt.
Der Dienst bedient die RS232 uns soll sich über ein Event melden, um die Nutzdaten abzuholen.
Leider habe ich beim Einbinden des Event ein Q_ASSERT Problem(Rot markiert):
00051 : QObject(parent), handleToEvent(hEvent), enabled(false)
00052 {
00053 Q_D(QObject);
00054 QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher);
00055 Q_ASSERT_X(eventDispatcher, "QWinEventNotifier::QWinEventNotifier()",
00056 "Cannot create a win event notifier without a QEventDispatcherWin32");
00057 eventDispatcher->registerEventNotifier(this);
00058 enabled = true;
00059 }
Das Problem tritt auf wenn ich folgenden Code ausführe(rot markiert):
bool MST_Interface::init(void)
{
//Auf die Dienst-Nachrichten registrieren
herrevent = INVALID_HANDLE_VALUE;
hrecevent = INVALID_HANDLE_VALUE;
hmsgqueue = INVALID_HANDLE_VALUE;
//WINAPI Event erstellen und in der QtMsgqueue registrieren
hrecevent = CreateEvent(NULL,FALSE,FALSE,TEXT("RXMessageready"));
if(hrecevent == INVALID_HANDLE_VALUE)
{
qDebug()<< __FILE__ << "Unable to create receive event" ;
return false;
}
else
{//Event Receive in der Qt-Queue registrieren
notrecevent = new QWinEventNotifier(hrecevent,this);
connect(notrecevent, SIGNAL(activated(HANDLE)),SLOT(&serviceReceiveHandler(HANDLE h)));
}
Leider habe ich gar keine Idee was daran falsch sein könnte.
Da ich das nicht zum Spaß mache sondern unter Zeitdruck stehe bin ich für jede Hilfe sehr dankbar!
ich bin noch realitiv in der Qt-Materie, habe aber schon das erste große Problem.
Ich schreibe eine Qt-Konsolenanwendung die Daten und Event seines WinCE-Dienst empfängt.
Der Dienst bedient die RS232 uns soll sich über ein Event melden, um die Nutzdaten abzuholen.
Leider habe ich beim Einbinden des Event ein Q_ASSERT Problem(Rot markiert):
00051 : QObject(parent), handleToEvent(hEvent), enabled(false)
00052 {
00053 Q_D(QObject);
00054 QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher);
00055 Q_ASSERT_X(eventDispatcher, "QWinEventNotifier::QWinEventNotifier()",
00056 "Cannot create a win event notifier without a QEventDispatcherWin32");
00057 eventDispatcher->registerEventNotifier(this);
00058 enabled = true;
00059 }
Das Problem tritt auf wenn ich folgenden Code ausführe(rot markiert):
bool MST_Interface::init(void)
{
//Auf die Dienst-Nachrichten registrieren
herrevent = INVALID_HANDLE_VALUE;
hrecevent = INVALID_HANDLE_VALUE;
hmsgqueue = INVALID_HANDLE_VALUE;
//WINAPI Event erstellen und in der QtMsgqueue registrieren
hrecevent = CreateEvent(NULL,FALSE,FALSE,TEXT("RXMessageready"));
if(hrecevent == INVALID_HANDLE_VALUE)
{
qDebug()<< __FILE__ << "Unable to create receive event" ;
return false;
}
else
{//Event Receive in der Qt-Queue registrieren
notrecevent = new QWinEventNotifier(hrecevent,this);
connect(notrecevent, SIGNAL(activated(HANDLE)),SLOT(&serviceReceiveHandler(HANDLE h)));
}
Leider habe ich gar keine Idee was daran falsch sein könnte.
Da ich das nicht zum Spaß mache sondern unter Zeitdruck stehe bin ich für jede Hilfe sehr dankbar!
Re: Win CE Event in Qt-Eventqueue einreihen
Die Fehlermeldung bei google eingeben, bringt einen Eintrag bei Stackoverflow zu Tage:
http://stackoverflow.com/questions/3511 ... tcherwin32
Trifft das bei dir auch zu?
http://stackoverflow.com/questions/3511 ... tcherwin32
Trifft das bei dir auch zu?
Re: Win CE Event in Qt-Eventqueue einreihen
Nein,
die Qt-DLL's sind ein Release - mein Binary - Debug.
Ich nutze die QextSerialPort nicht!
die Qt-DLL's sind ein Release - mein Binary - Debug.
Ich nutze die QextSerialPort nicht!
Re: Win CE Event in Qt-Eventqueue einreihen
Gelöst das Problem lag bereits bei der Programminstanzierung.
Re: Win CE Event in Qt-Eventqueue einreihen
Erzähl mir mehr darüber, wie Sie das Problem gelöst?Error1 hat geschrieben:Gelöst das Problem lag bereits bei der Programminstanzierung.
Re: Win CE Event in Qt-Eventqueue einreihen
Ganz einfach:
Auf eine Instanz von QObject zugegriffen vor dem Start von QCoreApplication a(argc, argv) in der main.
Ein dummer Copy&Paste Fehler!
Auf eine Instanz von QObject zugegriffen vor dem Start von QCoreApplication a(argc, argv) in der main.
Ein dummer Copy&Paste Fehler!
Re: Win CE Event in Qt-Eventqueue einreihen
Nein, ich meine es:Error1 hat geschrieben:Ganz einfach:
Auf eine Instanz von QObject zugegriffen vor dem Start von QCoreApplication a(argc, argv) in der main.
Ein dummer Copy&Paste Fehler!
Wie du fangen Sie ein Ereignis aus dem seriellen Port for WinCE?...
Ich schreibe eine Qt-Konsolenanwendung die Daten und Event seines WinCE-Dienst empfängt.
Der Dienst bedient die RS232 uns soll sich über ein Event melden, um die Nutzdaten abzuholen.
...
Du erstelle einen Thread mit einer Schleife:
Code: Alles auswählen
YuorThread::run
{
...
while (...) {
WaitCommEvent(..., ...);
}
...
}
Und wenn ja, wie Sie aus exit WaitCommEvent ??
Kann ich exit aus WaitCommEvent, execute SetCommMask (for WinCE)?
Ich möchte hinzufügen (bereits hinzugefügt), um QSerialDevice Unterstützung WinCE und wollen wissen: ob ich es realisiert oder nicht.
See: https://gitorious.org/qserialdevice/qse ... 4f8835e04b
PS: Sorry my Deutsch
Re: Win CE Event in Qt-Eventqueue einreihen
Hi kuzulis,
Ja, WaitCommEvent() wird in einem Thread aufgerufen.
Die serielle Kommunikation läuft in einem Service(Dienst) und wird in der Services.exe verwaltet.
Ich brauche hier nicht abzubrechen, da ich den Port immer belege.
In Qt warte ich dann mit WaitforMultiplyObjects() auf eigene Events aus diesem Dienst.
Ich habe mal kurz nahgeschaut und ich mache es mit SetCommMask();
Was passiert wenn du den Filedescriptor schließt? Kehrt WaitCommEvent() dann mit einem Fehler zurück? 
Have also a look at:http://msdn.microsoft.com/de-de/library/ms681951 This should work for sure.
Ja, WaitCommEvent() wird in einem Thread aufgerufen.
Die serielle Kommunikation läuft in einem Service(Dienst) und wird in der Services.exe verwaltet.
Ich brauche hier nicht abzubrechen, da ich den Port immer belege.
In Qt warte ich dann mit WaitforMultiplyObjects() auf eigene Events aus diesem Dienst.
Ich habe mal kurz nahgeschaut und ich mache es mit SetCommMask();
Code: Alles auswählen
//ReadThread beenden wenn gestartet
if(t_ReadThread.hthread != INVALID_HANDLE_VALUE)
{
t_ReadThread.bRun = FALSE;
SetCommMask(hserial, 0);
WaitForSingleObject(t_ReadThread.hthread,0);
CloseHandle(t_ReadThread.hthread);
}Have also a look at:http://msdn.microsoft.com/de-de/library/ms681951 This should work for sure.
Re: Win CE Event in Qt-Eventqueue einreihen
Code: Alles auswählen
Was passiert wenn du den Filedescriptor schließt? Kehrt WaitCommEvent() dann mit einem Fehler zurück?
Und ich hatte nichts zu seiner Arbeit zu überprüfen.
PS:
Ich habe bereits die Antwort auf diese: call SetCommMask() unterbricht WaitCommEvent() - das ist genau das, was ich wissen musste.
dh Ich habe eine positive Antwort.
Vielen Dank für Ihre Teilnahme.