Название: Передача часто QList между объектами в разных потоках Отправлено: YvenTitan от Август 05, 2016, 08:41 Здравствуйте.
У меня следующая проблема. Есть два объекта: obj1 и obj2, оба в разных потоках. Из объекта obj1 необходимо часто (в примере раз в 1 мс) передавать список QList<int> в obj2. Пример во вложении. Это упрощенный пример. В реальной задаче надо из одного объекта QAbstractTableModel передавать в другой объект QAbstractTableModel список QList<QStringList>. (Это заранее отвечая на вопрос, почему делаю странные действия). В данный момент программа вылетает, проработав секунд 2-10. Кажется, что дело в синхронизации. Можете подсказать как сделать, чтобы не вылетало? Пробовал синхронизировать - не получилось. Пробовал через QMutex и флаги, но возможно неправильно. Опыта работы с синхронизацией мало. Пишу на Qt4.8.7. Название: Re: Передача часто QList между объектами в разных потоках Отправлено: ssoft от Август 05, 2016, 08:52 Так вы осуществляете доступ к переменной m_list одновременно из разных потоков в void SecondObject::M_startSecondObject() и void SecondObject::M_copyList(QList<int> list).
Здесь лучше всего организовать передачу списка через сигнал-слот между obj1 и obj2, а не через прямой вызов метода M_copyList. И переменные static не нужно обозначать). Код
и осуществить вызов Код
Название: Re: Передача часто QList между объектами в разных потоках Отправлено: YvenTitan от Август 05, 2016, 10:25 Исправил, как вы сказали. Не помогло. Сигнал посылается, а слот по нему не срабатывает. Во вложении то, как я это делал
Название: Re: Передача часто QList между объектами в разных потоках Отправлено: Igors от Август 05, 2016, 11:15 Делать while/sleep не запрещено, но так Вы обрекаете себя на низкоуровневую синхронизацию и лишаетесь возможности принимать сигналы (нитка не может выйти в свой цикл событий). Если первая объект должен систематически чего-то посылать второму - лучше по таймеру (аттач)
Название: Re: Передача часто QList между объектами в разных потоках Отправлено: Racheengel от Август 05, 2016, 11:54 А чем мутексы не угодили?
Название: Re: Передача часто QList между объектами в разных потоках Отправлено: Igors от Август 05, 2016, 12:06 А чем мутексы не угодили? Все равно надо как-то "передавать", так почему бы не спихнуть все на имплисит шару?Название: Re: Передача часто QList между объектами в разных потоках Отправлено: Racheengel от Август 05, 2016, 15:49 А чем мутексы не угодили? Все равно надо как-то "передавать", так почему бы не спихнуть все на имплисит шару?А какая разница? Шара шарой, но защитить то ее тоже надо) Название: Re: Передача часто QList между объектами в разных потоках Отправлено: YvenTitan от Август 05, 2016, 16:19 Igors, спасибо большое, ваш совет помог!
Название: Re: Передача часто QList между объектами в разных потоках Отправлено: Igors от Август 05, 2016, 16:46 А какая разница? Шара шарой, но защитить то ее тоже надо) В том-то и дело что нет (при передаче по значению). Как только вторая нитка начнет первое удаление - QList "расшарится" |