Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: qtист от Декабрь 04, 2017, 15:39



Название: Очень много потоков
Отправлено: qtист от Декабрь 04, 2017, 15:39
Добрый день.

Вот есть класс:
Код
C++ (Qt)
class SAM_EXPORT sam
{
 
public:
sam();
~sam();
 
myThreadLK * newWorking;
QList<myThreadLK *> wokingLK0;
QThread *thLK[8];
 
myThreadrec * newReceive;
QList<myThreadrec *> receiveLK0;
QThread *thREC[8];
.......
}
sam::sam()
{
 
for(int i=0;i<KIP;i++)
{
thLK[i]=new QThread;
newWorking=new myThreadLK(NULL);
QObject::connect(thLK[i], SIGNAL(started()), newWorking, SLOT(run()));
newWorking->moveToThread(thLK[i]);
               wokingLK0.append(newWorking);
 
 
thREC[i]=new QThread;
newReceive=new myThreadrec(NULL);
QObject::connect(thREC[i], SIGNAL(started()), newReceive, SLOT(run()));
newReceive->moveToThread(thREC[i]);
receiveLK0.append(newReceive);
.......
 
}
}
 
 
myThreadLK и myThreadrec наследуются от QObject и в них объявлен слот run();
Потоки запускаются
thREC->start();
thLK->start();

Всё работает,потоки запускаются.
Но в процессе работы должен запуститься таймер
Код
C++ (Qt)
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(updateTimer()),Qt::DirectConnection);
.....
timer->start(100)
 

НЕ работает - слот не вызывается,а раньше когда myThreadLK и myThreadrec  наследовались от
QThread все работало.


Название: Re: Очень много потоков
Отправлено: qate от Декабрь 05, 2017, 08:34
таймер должен быть в классе наследнике qobject


Название: Re: Очень много потоков
Отправлено: qtист от Декабрь 05, 2017, 12:24
он и объявлен
Код
C++ (Qt)
class myThreadrec : public  QObject
{
Q_OBJECT
.......
    QTimer *timer;
}


Название: Re: Очень много потоков
Отправлено: qate от Декабрь 05, 2017, 13:03
во, новый код появился
может там еще чего есть ? )
не мучай нас, выкладывай на гитхаб свой проект


Название: Re: Очень много потоков
Отправлено: qtист от Декабрь 05, 2017, 13:28
не могу- запрещено у нас(хотя мне не жалко).
Узнают - уволят нахрен  :-\

вот класс
Код
C++ (Qt)
class myThreadrec : public  QObject//QThread
{
Q_OBJECT
 
public:
myThreadrec(QObject *parent);
~myThreadrec();
QTimer *timer;
 
//здесь всякая хрень типа переменных,функций
 
private slots:
void updateTimer();
 
public slots:
void run();
 
};
 
myThreadrec::myThreadrec(QObject *parent)
: QObject(parent)
{
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(updateTimer()),Qt::DirectConnection);
 
}
 
 
 

когда наследовался от QThread таймер работает
переделал на  QObject перестал работать
 


Название: Re: Очень много потоков
Отправлено: ViTech от Декабрь 05, 2017, 14:07
не могу- запрещено у нас(хотя мне не жалко).
Узнают - уволят нахрен  :-\

Мало кто захочет в голове компилировать неполные куски кода и запускать его (в голове же) в многопоточном режиме :).
Выкладывать надо не рабочий проект целиком (кому он тут нужен), а компилируемый минимальный проект, демонстрирующий проблему. Кстати, в ходе составления такого минимального проекта проблема может и решиться.