crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Выполнение произвольной фунции в отдельном потоке
kuler
  опции профиля:
сообщение 28.10.2008, 15:19
Сообщение #1


Танцор диско
***

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

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




Репутация:   -1  


не в QThread, чтоб как в паскале. Sleep(200) и ништяк (без таймеров)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 28.10.2008, 15:22
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3278
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Насколько я знаю можно только или таймер или QThread, по другому вроде как нельзя... :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.10.2008, 15:26
Сообщение #3


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

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

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




Репутация:   94  


непонятно для каких целей. Хочешь убить ГУЙ на время или для отладки, если для отладки в классе QTest, есть такая функция:
void QTest::qSleep ( int ms )
и
void QTest::qWait ( int ms ) [static]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 28.10.2008, 15:44
Сообщение #4


Танцор диско
***

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

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




Репутация:   -1  


а есть какая то хрень (типа вроде waitforobject) - это когда поток запустил, вызвал эту функцию и код остановился пока поток не завершится
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.10.2008, 15:54
Сообщение #5


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

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

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




Репутация:   94  


см. QWaitCondition
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 28.10.2008, 16:03
Сообщение #6


Танцор диско
***

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

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




Репутация:   -1  


а как сделать чтоб не разывать функцию:

func()
{
  method1() in thread

  if (thread->finished)
  {
    method2() in thread
     и тд

  }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.10.2008, 16:17
Сообщение #7


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

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

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




Репутация:   94  


kuler, не дошло, по подробнее пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 28.10.2008, 16:31
Сообщение #8


Танцор диско
***

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

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




Репутация:   -1  


ну обычно идет
метод1()
метод2() - выполняется после полного завершения мет1

если с потоками то
рун(метод1)
метод2() - выполняется сразу после запуска потока, но данные необходимые для его работы еще не сформированы потоком, поэтому косяк.

для этого делается
рун(метод1)
ждем когда он завершится
после этого выполняем метод2()

но нужно чтоб жуй функционировал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.10.2008, 16:40
Сообщение #9


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

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

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




Репутация:   94  


яб так сделал, создал наследника от QThread:
Раскрывающийся текст
class MyThread : public QThread
{
    Q_OBJECT

public:
    MyThread();
    ~MyThread();
    
    void method_1();
    void method_2();

protected:
    void run();

};


...
...
...
void MyThread::method_1()
{
...
}

void MyThread::method_2()
{
...
}

void ThreadSend::run()
{
    method_1();
    method_2();
}


где-то в основном коде программы:
MyThread    *mt;
    
    mt->start(QThread::LowestPriority);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 28.10.2008, 16:42
Сообщение #10


Мастер
******

Группа: Модератор
Сообщений: 3278
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


А чем это не подходит?
void QMyThread::run() 
{
   metod1();
   metod2();
   metod3();
}
методы будут выполняться друг за другом и в потоке.

Сообщение отредактировал ViGOur - 28.10.2008, 16:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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