crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> вопрос размещения объектов для работы в отдельном потоке
call_me_Frank
  опции профиля:
сообщение 13.12.2011, 11:57
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

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




Репутация:   0  


Привет, форумчане! :)

тема вот такая:

в программе имеется поток, который должен запускать сетевой протокол, обмениваться по нему данными и писать что-то в БД. вопрос такой, как и где лучше разместить объекты работы с протоколом и БД? поместить их в run() и каждый раз при необходимости создавать их и подключаться, или, может быть, разместить их внутри класса, запускающего поток, а, скажем, в конструкторе создавать их и подключаться один раз? а в run() путем транзакций передавать им данные для работы?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
call_me_Frank
  опции профиля:
сообщение 13.12.2011, 17:12
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

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




Репутация:   0  


вопрос, похоже, не ахти какой актуальный. но, просто хотелось бы сделать проект наиболее грамотно, и может все-таки кто-нибудь подскажет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mezmay
  опции профиля:
сообщение 14.12.2011, 20:08
Сообщение #3


Активный участник
***

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

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




Репутация:   1  


Создаешь класс например CMyWork, унаследованный от QObject, содержащий все необходимые для работы протокола и записи в БД функции.
Экземпляр этого класса создаешь в run(), затем подключаешь необходиме для связи с основным потоком сигналы и слоты и запускаешь exec():

Пример:
void CMyThread::run()
{
    CMyWork work;

    connect(m_pMainThread, SIGNAL(beginWork()), &work, SLOT(slotBeginWork()));
    connect(m_pMainThread, SIGNAL(writeStringToDB(QString)), &work, SLOT(slotWriteString(QString)));

    exec();
}


таким образом все методы класса CMyWork будут работать в отдельном потоке.

Сообщение отредактировал mezmay - 14.12.2011, 20:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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