PDA

View Full Version : [QT] processo while(1)


trallallero
12-09-2008, 10:20
Ho un processo (LL = Logic Library), attualmente non QT, che gira in questo classico modo:

while(1)
{
if (got msg)
{
do something()
}

if (pselect(1, NULL, NULL, NULL, &m_tv, &m_emptyset))
{
break;
}
}

in pratica, finchè non si fà un CTRL + C, gira all'infinito.
LL è creato come una libreria dinamica.

Ciò però crea un problema al programma QT perchè nel sistema:

QApplication a;
LL LogicLib;
a.exec();

non può funzionare visto che LL blocca tutto col suo ciclo infinito quindi a.exec() non viene eseguito.


QApplication a;
a.exec();
LL LogicLib;

neanche perchè a.exec() ha il suo ciclo QT infinito per l'applicazione, ergo LL non viene lanciato.

Attualmente quelle bestie crucche dei miei colleghi hanno fatto un timer nell'applicazione QT
che fà un quit dopo 2 secondi; quindi tutto viene inizializzato, parte l'applicazione QT, fà un quit
e parte la mia LL (:Puke:)

C'è qualche esperto QT che mi sappia dare qualche dritta su QT ? posso usare il QProcess ?
LL non ha bisogno di una form perchè è solo pura logica, non grafica.

Grazie :)

trallallero
12-09-2008, 14:20
Ho risolto con QThread, grazie lo stesso

^TiGeRShArK^
12-09-2008, 15:05
Ho risolto con QThread, grazie lo stesso

Ecco te lo stavo per dire io di usare i Thread anche se non conoscevo QThread... sono arrivato tardi però :p

trallallero
12-09-2008, 15:10
Ecco te lo stavo per dire io di usare i Thread anche se non conoscevo QThread... sono arrivato tardi però :p

Troppo facile, dirlo dopo son capaci tutti :Prrr:

però non capisco una cosa ....
la classe QThread è pure abstract per questo metodo:
virtual void run() = 0;

io ho creato la mia
class LLEngine : public QThread

NON ho definito alcuno metodo run() e ... ZERO errori :mbe:

Poi l'ho fatto per farlo funzionare, ovviamente, ma mi sembra strano che non mi dia errori se non lo definisco.
Mi son rincoglionito io ?

^TiGeRShArK^
12-09-2008, 15:41
Troppo facile, dirlo dopo son capaci tutti :Prrr:

però non capisco una cosa ....
la classe QThread è pure abstract per questo metodo:
virtual void run() = 0;

io ho creato la mia
class LLEngine : public QThread

NON ho definito alcuno metodo run() e ... ZERO errori :mbe:

Poi l'ho fatto per farlo funzionare, ovviamente, ma mi sembra strano che non mi dia errori se non lo definisco.
Mi son rincoglionito io ?
:mbe:
vabbè che non tocco C/C++ da un bel pò...
Ma non era obbligatorio implementare i metodi virtual nelle sottoclassi? :stordita:
che compilatore hai? cinese? :asd:

trallallero
12-09-2008, 15:55
:mbe:
vabbè che non tocco C/C++ da un bel pò...
Ma non era obbligatorio implementare i metodi virtual nelle sottoclassi? :stordita:
che compilatore hai? cinese? :asd:

ecchettedevodì ? :boh:

secondo me è QT che sputtana tutto

k0nt3
12-09-2008, 16:55
non è colpa delle QT mi è successo anche in un progetto in C++ puro.. suppongo che faccia parte delle mirabolanti specifiche del C++ :p

Sabonis
12-09-2008, 17:15
:mbe:
vabbè che non tocco C/C++ da un bel pò...
Ma non era obbligatorio implementare i metodi virtual nelle sottoclassi? :stordita:
che compilatore hai? cinese? :asd:

Mi sa di no. Semplicemente anche la tua classe derivata è abstract e non potrai istanziare degli oggetti di quella classe.
O forse mi sbaglio :sofico:, Troppo incasinato il c++!

^TiGeRShArK^
12-09-2008, 19:44
Mi sa di no. Semplicemente anche la tua classe derivata è abstract e non potrai istanziare degli oggetti di quella classe.
O forse mi sbaglio :sofico:, Troppo incasinato il c++!

Si, ma in quel caso non avrebbe dovuto definire la sua sottoclasse con la parola chiave abstract?:mbe:
e nel codice che ha postato a me sembra che ha creato una sottoclasse concreta.. :fagiano:

cionci
12-09-2008, 20:32
Si, ma in quel caso non avrebbe dovuto definire la sua sottoclasse con la parola chiave abstract?:mbe:
In C++ una classe è astratta quando ha metodi virtuali puri. Se derivo da una classe astratta e non implemento i metodi ho ancora una classe astratta.

^TiGeRShArK^
12-09-2008, 20:38
In C++ una classe è astratta quando ha metodi virtuali puri. Se derivo da una classe astratta e non implemento i metodi ho ancora una classe astratta.

a quindi là non c'era la parola chiave abstract? :stordita:
l'ho detto che è da una vita che non tocco c++ :asd:

trallallero
15-09-2008, 08:58
In C++ una classe è astratta quando ha metodi virtuali puri. Se derivo da una classe astratta e non implemento i metodi ho ancora una classe astratta.
Ben tornato :)