Russian Qt Forum
Ноябрь 22, 2024, 08:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Очень много потоков  (Прочитано 3514 раз)
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 все работало.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Декабрь 05, 2017, 08:34 »

таймер должен быть в классе наследнике qobject
Записан
qtист
Гость
« Ответ #2 : Декабрь 05, 2017, 12:24 »

он и объявлен
Код
C++ (Qt)
class myThreadrec : public  QObject
{
Q_OBJECT
.......
    QTimer *timer;
}
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Декабрь 05, 2017, 13:03 »

во, новый код появился
может там еще чего есть ? )
не мучай нас, выкладывай на гитхаб свой проект
Записан
qtист
Гость
« Ответ #4 : Декабрь 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 перестал работать
 
« Последнее редактирование: Декабрь 05, 2017, 14:23 от qtист » Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #5 : Декабрь 05, 2017, 14:07 »

не могу- запрещено у нас(хотя мне не жалко).
Узнают - уволят нахрен  В замешательстве

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

Пока сам не сделаешь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.345 секунд. Запросов: 22.