Название: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 15:27 Можно ли использовать QList в качестве буфера для бинарных данных(25-30 айтемов)? или посоветуете альтернативу?
Название: Re: QList в качестве буфера Отправлено: Bepec от Июнь 26, 2013, 15:30 Можно, никто не запрещает.
Если не нужно лучшее быстродействие, то да. Если нужно - стандартные STL контейнеры. Если нужно максимальное - самописные контейнеры. Но это редкость для 25-30 записей. Название: Re: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 16:11 А что делает метод void QList::append(const T & value) по сути? создает копию или просто хранит указатель?
Если скажем так Код
или так Код
Какой метод лучше? Название: Re: QList в качестве буфера Отправлено: Old от Июнь 26, 2013, 16:15 Какой метод лучше? В данном случае (QList) все равно. Даже при использовании второго варианта, QList будет хранить указатели, а не сами объекты.Название: Re: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 16:23 Хорошо, а если визвать void QList::removeFirst() то удалится сам объект или указатель?
Название: Re: QList в качестве буфера Отправлено: Majestio от Июнь 26, 2013, 16:24 Можно ли использовать QList в качестве буфера для бинарных данных(25-30 айтемов)? или посоветуете альтернативу? Лучшей альтернативой (при такой постановке задачи) - будет обычный массив размерности 30. Название: Re: QList в качестве буфера Отправлено: Old от Июнь 26, 2013, 16:26 Хорошо, а если визвать void QList::removeFirst() то удалится сам объект или указатель? В каком случае?Если в первом варианте, то сам указатель, если во втором, то объект. Название: Re: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 16:37 Можно ли использовать QList в качестве буфера для бинарных данных(25-30 айтемов)? или посоветуете альтернативу? Лучшей альтернативой (при такой постановке задачи) - будет обычный массив размерности 30. Код
Название: Re: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 16:45 Хорошо, а если визвать void QList::removeFirst() то удалится сам объект или указатель? В каком случае?Если в первом варианте, то сам указатель, если во втором, то объект. Дело в том, что у меня при чтении и записи в разных потоках, через некоторое время вылетает ошибка удаления первого элемента в списке... не пойму в чем подвох... Название: Re: QList в качестве буфера Отправлено: Old от Июнь 26, 2013, 16:47 Дело в том, что у меня при чтении и записи в разных потоках, через некоторое время вылетает ошибка удаления первого элемента в списке... не пойму в чем подвох... А вы правильно работаете с общим QList из разных потоков? Средствами синхронизации пользуетесь?Название: Re: QList в качестве буфера Отправлено: Majestio от Июнь 26, 2013, 16:51 Дело в том, что у меня при чтении и записи в разных потоках, через некоторое время вылетает ошибка удаления первого элемента в списке... не пойму в чем подвох... QList: All functions in this class are reentrant. Далее читаем: http://qt-project.org/doc/qt-5.0/qtcore/threads-reentrancy.html#reentrant Название: Re: QList в качестве буфера Отправлено: Majestio от Июнь 26, 2013, 16:53 Масив не подходит, так как нужно передавать структуру в которой данные и парочку флагов Массив указателей на структуры. В чем беда?Название: Re: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 16:55 Блокирую операцию так:
Код
Но как я понял операция append() и removeFirst() имеют встроенный мютекс и дополнительно можно не использовать сторонние мютексы или нет? Название: Re: QList в качестве буфера Отправлено: Old от Июнь 26, 2013, 17:00 Здесь опечатка? Или вы действительно пытаетесь удалить первый элемент, когда список пуст?
Название: Re: QList в качестве буфера Отправлено: Old от Июнь 26, 2013, 17:01 Но как я понял операция append() и removeFirst() имеют встроенный мютекс и дополнительно можно не использовать сторонние мютексы или нет? Вы не правильно поняли. Свой мютекс нужен.Название: Re: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 17:05 Здесь опечатка? Или вы действительно пытаетесь удалить первый элемент, когда список пуст? Где пропал ! , я же ставил.... Название: Re: QList в качестве буфера Отправлено: Igors от Июнь 26, 2013, 17:21 Но как я понял операция append() и removeFirst() имеют встроенный мютекс и дополнительно можно не использовать сторонние мютексы или нет? Мне неизвестен ни один контейнер ни в std:: ни в Qt который имел бы встроенный мутекс. Все эти контейнеры "потоко-опасны" и засисяться нужно самому.Можно ли использовать QList в качестве буфера для бинарных данных(25-30 айтемов)? или посоветуете альтернативу? На таком порядке данных (25-30) достоинства контейнера особого значения не имеют. А если сам айтем хоть сколько-то приличный (32 байтв и более) то вообще QList - хороший, а может и лучший выборНазвание: Re: QList в качестве буфера Отправлено: Old от Июнь 26, 2013, 17:22 Где пропал ! , я же ставил.... Попробуйте использовать вместо ручного управления мютексами (lock/unlock) - QMutexLocker.IMHO, где-то у вас с синхронизацией проблема. Название: Re: QList в качестве буфера Отправлено: Old от Июнь 26, 2013, 17:23 Мне неизвестен ни один контейнер ни в std:: ни в Qt который имел бы встроенный мутекс. Это потому, что они не могут существовать. :)Название: Re: QList в качестве буфера Отправлено: Ubuntu_linux от Июнь 26, 2013, 23:48 Ну вродебы весь геморрой из за указателей при большой скорости обмена в вдох потоках.
Название: Re: QList в качестве буфера Отправлено: Bepec от Июнь 27, 2013, 06:47 Маленькая поправка - для программы не существует "большой скорости обмена". Если у неё нормальная архитектура, тогда будет работать. Если ненормальная - печаль и проблемы :P
PS используйте мутексы и не парьтесь. Название: Re: QList в качестве буфера Отправлено: Igors от Июнь 27, 2013, 07:01 Маленькая поправка - для программы не существует "большой скорости обмена". Еще как существует Ну вродебы весь геморрой из за указателей при большой скорости обмена в вдох потоках. Это легко проверить - напр на OSX утилита покажет overhead на диаграмме процессоров. На др платформах тоже должны быть такие средства. Но причиной может быть неправильная синхронизация или ее отсутствие (у Вас я пока не вижу как нитку будите).Название: Re: QList в качестве буфера Отправлено: Old от Июнь 27, 2013, 07:21 Ну вродебы весь геморрой из за указателей при большой скорости обмена в вдох потоках. Показывайте ваши потоки без основной работы, но с синхронизацией.Название: Re: QList в качестве буфера Отправлено: serg_hd от Июнь 28, 2013, 13:32 Какой метод лучше? В данном случае (QList) все равно. Даже при использовании второго варианта, QList будет хранить указатели, а не сами объекты.Название: Re: QList в качестве буфера Отправлено: Old от Июнь 28, 2013, 13:47 а может всё-таки копии объектов? Хорошо. Указатели на копии объектов. :-) Но здесь ключевой момент - указатели. |