crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  < 1 2 3 4 5 > »   
Ответить в данную темуНачать новую тему
> многопоточность QThread
Litkevich Yuriy
  опции профиля:
сообщение 11.6.2010, 6:51
Сообщение #21


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(eldar85 @ 11.6.2010, 5:16) *
//я же могу что угодно накидать для выполнения? правильно?
именно для этого он и сделан. Собственно говоря, он-то и выполняется в другом потоке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 11.6.2010, 9:33
Сообщение #22


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


все равно что то не то получается... если я запускаю в цикле запуск потоков, то (на мой взгляд судя по сообщению в консоли QThread: Destroyed while thread is still running запускаетс один и тот же поток столько раз сколько я поставил в цикле
) происходит вылет программы и выводится результат лишь последнего потока.
void mainWindow::Start()
{
Thread thread;
list1 << "1" << "2" << "3"<< "4" << "5" << "6"<< "7" << "8" << "9"<< "10" << "11" << "12"<< "13" << "14" << "15";
list2 << "101" << "102" << "103"<< "104" << "105" << "106"<< "107" << "108" << "109"<< "110" << "111" << "112"<< "113" << "114" << "115";
q3 = text1->toPlainText();
qDebug() << q3;
        for(int i=0; i<5; i++)
{
            q1 = list1[i];
            q2 = list2[i];

    thread.start();

}
text->append(q3);

}

void Thread::run()
{
       makeFunktion(q1, q2);


}

void Thread::makeFunktion(QString str1, QString str2)
{

  
  Sleep(1000);
  qDebug() << q1 << q3;
       // qDebug() << str1 << str2;
}


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 11.6.2010, 11:14
Сообщение #23


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


вообще ничего не пойму, как же мне хотябы 5 потоков в одно время то запустить??? чтобы они выполняли одну функцию, но с с двумя разными перемеными QString????
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 11.6.2010, 12:32
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Тема больше для раздела "Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие".

eldar85, читай документацию, ты задаешь такие вопросы, ответ на которые можно получить за 10 минут просто посмотрев примеры и почитав описание к классу QThread.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 11.6.2010, 18:07
Сообщение #25


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


так вот именно что про QThread написано всего то:
всего один пример
 class MyThread : public QThread
{
public:
     void run();
};

void MyThread::run()
{
     QTcpSocket socket;
     // connect QTcpSocket's signals somewhere meaningful
     ...
     socket.connectToHost(hostName, portNumber);
     exec();
}

и тот не объясняет как можно много потоков в одно время запустить... ну есть тут метод ран, сразу 10 потоков к примеру запустить что бы с фукцией моей работали... ничего не описано)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.6.2010, 19:51
Сообщение #26


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


создаёшь десять экземпляров класса MyThread, всем командуешь run(), вот тебе 10 потоков
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 12.6.2010, 1:49
Сообщение #27


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


спасибо)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 21.6.2010, 14:01
Сообщение #28


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


вновь взялся за потоки, выяснил как их запускать в цикле:
Thread thread[10];

for( int n = 0; n < 4; n++)
    {
        thread[n].start();
        Sleep(10);
    }

for( int n = 0; n < 4; n++)
    {
        thread[n].wait();

        Sleep(10);
    }

и функция run()
void Thread::run()
{
       makeFunktion("1", "2");
       Sleep(10000);
       makeFunktion("3", "4");



}

одно как то не сходится, пока идет это ожидание в 10сек, главное окно висит все это время... не пойму, вроде вызвал потоки, и по идее же все происходит в разных потоках, почему главный то поток виснет...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.6.2010, 14:05
Сообщение #29


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Sleep(10); - это же, вроде, 10мс :)

А разве основной поток может завершиться, пока выполняются дочерние ? Кроме того, если завершить основной, то дочерние сдохнут сразу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 21.6.2010, 14:10
Сообщение #30


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(eldar85 @ 21.6.2010, 15:01) *
одно как то не сходится, пока идет это ожидание в 10сек, главное окно висит все это время... не пойму, вроде вызвал потоки, и по идее же все происходит в разных потоках, почему главный то поток виснет...


Вот скажи, что делает этот код и для чего ты его написал? ;)
for( int n = 0; n < 4; n++)
    {
        thread[n].wait();

        Sleep(10);
    }

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

6 страниц V  < 1 2 3 4 5 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 2:55