Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, Qt] Pętla nieskończona nie blokująca reszty programu (wielowątkowość)

Ostatnio zmodyfikowano 2013-06-25 12:13
Autor Wiadomość
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?

C/C++
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" ) ) );
        //ui->lineEdit->setText(sstring);
        this->msleep( 2000 );
    }
}


void Producent::replyFinished( QNetworkReply * reply ) {
    qDebug() << "DONE";
   
    QJsonDocument document = QJsonDocument::fromJson( reply->readAll() );
    QString string;
   
    //ui->lineEdit->setText( string.setNum(document.object().value( "high" ).toDouble()) ); // przypisanie najwyższej("high") w tym dniu
}

OknaKlasa::OknaKlasa( QWidget * parent )
    : QMainWindow( parent )
    , //, Qt::FramelessWindowHint), ui( new Ui::OknaKlasa )
{
    ui->setupUi( this );
   
    Producent producent1( 123, 1, ui );
    producent1.start();
}
P-86045
DejaVu
» 2013-06-24 11:55:41
Przecież już zgłaszałeś ten błąd i dostałeś odpowiedzi.

[Qt, C++] No such slot MyClass::replyFinished(QNetworkReply*)
P-86067
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ą.
P-86071
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.
P-86083
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.
P-86088
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?
P-86096
jankowalski25
» 2013-06-24 21:53:20
da się (...) bez pomocy wątków?
Tak, pseudokod:
C/C++
bool koniec = false;
bool usypiacz = false;
while( !koniec )
{
    wykonaj_dane();
    usypiacz = sprawdzenie_stanu_usypiacza();
    if( !usypiacz ) wykonaj_dodatkowe_dane();
   
    koniec = test_konca_programu();
}
P-86104
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?
P-86106
« 1 » 2
  Strona 1 z 2 Następna strona