[C++, Qt] Pętla nieskończona nie blokująca reszty programu (wielowątkowość)
Ostatnio zmodyfikowano 2013-06-25 12:13
look997 Temat założony przez niniejszego użytkownika |
[C++, Qt] Pętla nieskończona nie blokująca reszty programu (wielowątkowość) » 2013-06-23 21:32:11 Teraz pojawił się problem z:
QObject::connect: No such slot QThread::replyFinished(QNetworkReply*)
Jak to naprawić? Użyć moveToThread w tym kodzie?
class Producent : public QThread { public: Producent( int, int, Ui::OknaKlasa * ui ); void run(); public slots: void replyFinished( QNetworkReply * ); private: int n; int i; Ui::OknaKlasa * ui; };
Producent::Producent( int, int, Ui::OknaKlasa * ui ) { this->n = n; this->i = i; this->ui = ui; }
void Producent::run() { int ch2 = 1; QString sstring = "fd"; QNetworkAccessManager * manager = new QNetworkAccessManager; connect( manager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( replyFinished( QNetworkReply * ) ) ); while( true ) { qDebug() << ch2++; manager->get( QNetworkRequest( QUrl( "https://adr.es/data.json" ) ) ); this->msleep( 2000 ); } }
void Producent::replyFinished( QNetworkReply * reply ) { qDebug() << "DONE"; QJsonDocument document = QJsonDocument::fromJson( reply->readAll() ); QString string; }
OknaKlasa::OknaKlasa( QWidget * parent ) : QMainWindow( parent ) , ui( new Ui::OknaKlasa ) { ui->setupUi( this ); Producent producent1( 123, 1, ui ); producent1.start(); }
|
|
DejaVu |
» 2013-06-24 11:55:41 |
|
look997 Temat założony przez niniejszego użytkownika |
» 2013-06-24 13:31:50 To jak zdefiniować slot wewnątrz funkcji albo jak połączyć go z osobnym wątkiem? Tutaj są wątki i dlatego jest ten błąd - czyli z innego powodu i z inną receptą. |
|
DejaVu |
» 2013-06-24 17:23:35 Moim zdaniem problem masz cały czas ten sam i odpowiedź na pytanie dostałeś - w tym również link do kursu. |
|
look997 Temat założony przez niniejszego użytkownika |
» 2013-06-24 18:22:11 To mi nie pomaga, bo nie mogę użyć 2x QObject, nie wiem jak przekazać. Proszę wyjaśnić, jak to zrobić inaczej. |
|
look997 Temat założony przez niniejszego użytkownika |
» 2013-06-24 20:57:18 Może da się czymś innym zrobić tak, żeby usypiać program w pętli a reszta programu działała niezależnie bez pomocy wątków? |
|
jankowalski25 |
» 2013-06-24 21:53:20 da się (...) bez pomocy wątków? |
Tak, pseudokod: bool koniec = false; bool usypiacz = false; while( !koniec ) { wykonaj_dane(); usypiacz = sprawdzenie_stanu_usypiacza(); if( !usypiacz ) wykonaj_dodatkowe_dane(); koniec = test_konca_programu(); } |
|
look997 Temat założony przez niniejszego użytkownika |
» 2013-06-24 21:57:42 Tylko czy to jest dobre rozwiązanie w tym przypadku? |
|
« 1 » 2 |