Pogledajte određenu poruku
Staro 20. 06. 2011.   #1
misk0
majstor
Wrote a book
 
Avatar misk0
 
Datum učlanjenja: 30.01.2006
Lokacija: Lugano - Switzerland
Poruke: 1.251
Hvala: 219
106 "Hvala" u 67 poruka
misk0 će postati "faca" uskoromisk0 će postati "faca" uskoro
Pošaljite ICQ poruku za misk0 Pošaljite poruku preko Skype™ za misk0
Default QT newbie.. problem sa klasom

Za fax trebam napraviti neki programcic u C++ koristeci QT. Zasto, kako .. nije se mene pitalo.
Uglavnom imam problem:


SingleThread class:

Kôd:
#include <QThread>
#include "pthread.h"

#ifndef SINGLETHREAD_H
#define SINGLETHREAD_H

class SingleThread : public QThread
 {
     Q_OBJECT;

 public:
    SingleThread();
    void stopThread();
    void changePriority(int);

 protected:
     void run();

 signals:
     void updateProgress(int);

 private:
     int counter, direction;
     bool working;
     struct sched_param params;

 };
#endif // SINGLETHREAD_H
Kôd:
#include "SingleThread.h"
#include <stdio.h>
#include <iostream>

SingleThread::SingleThread()
{
    counter = 0;
    working = true;
    direction = 1;
    int policy, s;

    s = pthread_getschedparam(pthread_self(), &policy, &params );
    qDebug("Read success = %d   |   policy: %d | sched_priority: %d", s, policy, params.sched_priority);
    params.sched_priority = 1;

    s = pthread_setschedparam(pthread_self(), SCHED_RR, &params );

    qDebug("Set success: %d | sched_priority: %d", s, params.sched_priority);
    qDebug("Pointer Address: %p \n\n", &params);
};

void SingleThread::run()
{

    working = true;

    std::cout << "Thread::run()" << std::endl;
    while (working){
        counter += direction;
        emit updateProgress(counter);
        msleep(30);
        if ( counter > 99)
        {
            direction = -1;
        } else if ( counter < 1)
        {
            direction = 1;
        }
    }

};

void SingleThread::stopThread() {
    working = false;
}

void SingleThread::changePriority(int newPriority) {
    int policy,s ;
    params.sched_priority = newPriority;

    s = pthread_setschedparam(pthread_self(), SCHED_RR, &params );
    qDebug("Set success: %d \n", s);

    pthread_getschedparam(pthread_self(), &policy, &params );
    qDebug("Policy: %d == Priority: %d\n", policy, params.sched_priority);

}
mainwindow.h
Kôd:
private:
    SingleThread thread_1, thread_2, thread_3, thread_4, thread_5;
tu deklarishem ove thread-ove i koliko kontam automatski po inicijalizaciji mainwindow-a threadovi su kreirani i pozvan je konstruktor metod thread.

Po startovanju app dobijam ovaj output
Citat:
root@ubuntu-vm:/home/misk0/qt/Test1# sudo ./Test1
Read success = 0 | policy: 0 | sched_priority: 0
Set success: 0 | sched_priority: 1
Pointer Address: 0xbfd49794


Read success = 0 | policy: 2 | sched_priority: 1
Set success: 0 | sched_priority: 1
Pointer Address: 0xbfd497ac


Read success = 0 | policy: 2 | sched_priority: 1
Set success: 0 | sched_priority: 1
Pointer Address: 0xbfd497c4


Read success = 0 | policy: 2 | sched_priority: 1
Set success: 0 | sched_priority: 1
Pointer Address: 0xbfd497dc


Read success = 0 | policy: 2 | sched_priority: 1
Set success: 0 | sched_priority: 1
Pointer Address: 0xbfd497f4

Primjetite da prvi kreiran thread ima policy: 0 i sched_priority 0 a svi ostali imaju druge vrijednosti.
Ne kontam zasto i kako? Imam osjecaj da je neka varijabla djeljena izmedju instanci thread-ova ali ne mogu skontati koja..

hvalaa
__________________
@Twitter
misk0 je offline   Odgovorite uz citat