LINUX.ORG.RU

Как реализовать в qt работу с QList нескольким потокам для записи и чтения ?

 , ,


0

1

Есть не сколько потоков в программе, один обновляет QList, может удалять в нем элементы и добавлять. Остальные только читают. QList объявлен глобально в классе, который занимается обновлением его. В другие потоки передавал по ссылке QList для чтения, сейчас сделал по значению передачу. Но прога иногда каким-то случайным образом падает. Во всех классах для чтения QList проверяется его размер и соответственно нету выхода за пределы массива вроде как.

Вот из-за чего падает каким-то случайным образом и как такой баг отловить ?

Ответ на: комментарий от ox55ff

Так падало и по ссылке когда передача. А можешь объяснить почему падает. Падает в классах чтения обычно на самых первых обращениях к QList на методах size(). Так как в классах чтения что-то типа такого

list = myClass_writen->GetList();

for(int i=0;i<list->size();i++)
{
   qDebug() << "list" << list.at(i);
}
user2132
() автор топика
Ответ на: комментарий от ox55ff

возможно без мьютекса будет лучше - пусть в гуевый тред засылает сигналы на которые подпишет модель, которая засетена во вьюху, так ему лишь нужно доработать модель под свои нужды, а стандартное поведение связки модели и вьюхи само все отрисует как надо.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Я смутно представляю его архитектуру. Если читающим потокам отправлять копию и отправкой (вызов emit) будет заниматься пишущий поток, то можно и без мьютекса. Но тогда инициировать отправку нужно будет через сигнал с Qt::queuedConnection.

ox55ff ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.