[gelöst] QThread Knoten im Kopf

Alles rund um die Programmierung mit Qt
Antworten
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

[gelöst] QThread Knoten im Kopf

Beitrag von bw1faeh0 »

Hallo Leute,

ich möchte folgendes Problem mit zwei Threads lösen:

Thread 1 liest Daten von einer Hardware ein (Pollen) und schreibt diese in eine QList

Thread 2 liest die Daten aus der Qlist und schickt sie an die Ausgabe weiter.

Nun meine Frage dazu: Wie gehe ich dieses Problem an?

Ich wollte es so machen:
Erzeugung einer Klasse pollThread, die von QThread abgeleitet wird. Übergabe einer existierenden QList an den Konstruktor von pollThread.
Erstellung von einem Timer in pollThread, der regelmäßig die hardware abfragen soll.
dazu will ich das timeout-signal mit einem private slot in QThread verbinden. Kann ich das so machen?

grüße

Christian
Zuletzt geändert von bw1faeh0 am 25. Oktober 2007 14:24, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ja, nur den Zugriff auf die QList<> musst Du oich synchronisieren.
Oder, wie ich schon in einen anderen Thread vorgeschlagen habe, die Daten einfach per Signal verschicken.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

mhh... aber irgendwie mag der Compiler das Ganze ganz und garnicht

Schon an der Header-Datei muckt er rum:

Code: Alles auswählen

#ifndef __FMBSNIFFER_H__
#define __FMBSNIFFER_H__

#include "global.h"
#include "Workspace.h"
#include "fmbmonitor.h"
#include <QList>

enum
{
	c_POLL_INTERVALL = 10
};

enum
{
	c_OPEN_CONNECTION_INTERVALL = 1000
};

Code: Alles auswählen

class PollThread:public QThread
{
public:
	PollThread(QList *usedTelegramList);
	~PollThread();
	
	void start();
	
private slots:
	void readFromHardware();

private:
	QList	*telegramList;
	unsigned long i_list;		
	QTimer	*pollTimer;
	QString *newTelegram;
	
	
protected:
	void run();
};

Code: Alles auswählen

class SendThread : public QThread
{
public:
	SendThread(QList *usedTelegramList, Workspace *usedWorkspace)
	start();
	
private:
	QList		*telegramList;
	QString		*telegram;
	QTimer		*sendTimer;
	Workspace	*workspace;
	
protected:
	void run();	
};

Code: Alles auswählen

class FmbSniffer{
public:
	FmbSniffer(fmbMonitor *mainWindow,  Workspace *usedWorkspace)
;
	~FmbSniffer();

public slots:
	void openConnection();
	
private:
	PollThread	*pollFmbSniffer;
	QTimer		*connectionTimer;
	SendThread	*sendToView;
	QList		*telegramList;
	
	
	bool		connected;
	
	//	Verweise auf bereits existierende Objekte
	fmbMonitor	*mainApp;
	Workspace	                *workspace;
};

#endif /*__FMBSNIFFER_H__*/

Der compiler meint folgendes dazu:


FmbSniffer.h:22: error: expected `)' before '*' token
FmbSniffer.h:31: error: ISO C++ forbids declaration of `QList' with no type
FmbSniffer.h:31: error: expected `;' before '*' token
FmbSniffer.h:44: error: expected `)' before '*' token
FmbSniffer.h:48: error: ISO C++ forbids declaration of `QList' with no type
FmbSniffer.h:48: error: expected `;' before '*' token
FmbSniffer.h:57: error: expected `)' before '*' token
FmbSniffer.h:57: error: expected `,' or `;' before '*' token

Warum gibt es die Probleme mit QList??

Habe ich gerade ein großes Brett vorm Kopf??
Zuletzt geändert von bw1faeh0 am 25. Oktober 2007 11:05, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Siehe Doku zu QList. Es ist ein Template!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

kopf->Tischkante...

kaum macht man es richtig, da geht es ;)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Hehe,

aber wie gesagt ist das ganze noch thread-sicher zu machen. Also noch einen QMutex rein damit der Zugriff auf die QList<> synchronisiert werden kann.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

Danke für den Tipp
Antworten