Просмотр сообщений
|
Страниц: 1 ... 3 4 [5] 6 7 ... 69
|
62
|
Программирование / Алгоритмы / Re: Проверка синхронности данных по каналам
|
: Март 25, 2016, 15:54
|
Есть два шкафа оборудования. Они дублируют друг друга. Типа горячий резерв. К каждому шкафу подключено по два сервера. Т.е. система два по два. Итого 4 канала. Т.к. в любой момент может выйти из строя один из шкафов или один из серверов, была выбрана такая вот схема. К сожалению столкнулись с тем, что временами наблюдается рассинхронизация данных, которая возникает из за сетевых задержек, глюков оборудования и т.п. В текущий момент пользователь видит данные только с одного канала, остальные как бы в горячем резерве. Если канал отваливается, происходит переключение на следующий. Так вот, возникли ситуации, когда данные по некоторым объектам были в определенные периоды разными. Опустим здесь изъяны архитектуры, к сожалению я не могу на это повлиять, каналы должны быть независимыми друг от друга. Поэтому конечная точка сведения данных моя программа. При возникновении рассинхрона, пользователю будет выдано об этом сообщение, что бы он мог переключаться вручную, и смотреть какие данные по каким кланам в текущий момент. Пока вроде с простым перебором свойств нагрузка на проц не очень большая, в пределах 1-2% на core i7 4770. Исполнительное оборудование по проще, core i5 второго поколения. Просто я догадываюсь, что есть более изящные способы проверки. Как я упоминал выше, например расчёт хеша для каждого StateObject. Но как єто отразится на производительности.
|
|
|
63
|
Qt / Установка, сборка, отладка, тестирование / Разное поведение программы при отладке и запуске в обычном режиме
|
: Март 25, 2016, 13:30
|
Привет. Столкнулся с таким странным поведением моей программы. Если ее запустить обычно, то в консоль выводится сообщение qDebug, которое происходит, если два значения не равны. Если я ставлю точку останова на это место и запускаю отладку, то приложение работает нормально, но на точке останова оно не останавливается и соответственно сообщение в консоль не выдается (получается что оба значения равны). В чем может быть причина? Приложение собрано в конфигурации DEBUG.
|
|
|
64
|
Программирование / Алгоритмы / Проверка синхронности данных по каналам
|
: Март 25, 2016, 12:59
|
Привет. Есть некоторые объекты , наследники от QObject, состояния которых приходит по сети в json (хотя не суть важно). У объектов есть свойства, некоторые булевые, некоторые целочисленные, перечисления, float и строковые. Ну например class StateObject : public QObject { Q_PROPERTY (bool prop1 ...) Q_PROPERTY (bool prop2 ...) Q_PROPERTY (int prop3 ...) Q_PROPERTY (float prop4 ...) Q_PROPERTY (QString prop5 ...) Q_PROPERTY (some_enum prop6 ...) ... }
Состояние этого объекта обновляется несколько раз в секунду на основании данных с сети, парсится json, и обновляются свойства объекта, после чего его свойства уже читаются другими объектами. Так вот, у меня 4 сетевых канала данных, по которым приходят состояния этого объекта. Иногда наблюдается рассинхронизация данных, например prop1 по одному каналу false, по остальным трем true. Мне нужно проверять каждую секунду синхронность состояний StateObject. На каждое сетевое подключение свой экземпляр StateObject. Таких объектов на самом деле много (тысячи). Но не все меняют свое состояние часто, одни периодически, одни асинхронно по событиям извне. Так вот, сейчас синхронность проверяется тупым перебором свойств и сравниванием их значений. Я подумал, может есть более элегантное решение, например для каждого StateObject вычислять хеш его состояния на основании его свойств при каждом изменении, а дальше просто сравнивать их хеши. Нужно подобрать оптимальный вариант в плане производительности. Полагаю тупой перебор свойств у четырех экземпляров StateObject и сравнение QVariant не самое оптимальное решение.
|
|
|
65
|
Qt / Общие вопросы / Стоит ли использовать QSharedData в данном случае?
|
: Март 21, 2016, 18:29
|
Привет. На сколько мне известно QString использует implicit sharing. Нужно ли мне использовать для своего класса QSharedDataPointer, если класс имеет вид: class CDecodedMessage { QDateTime fdt; QString fmessage; QString fwarnLevel; }
Т.е. пару строк и дата. Экземпляры хранятся в списках, передаются в функции (по ссылкам) и т.п. Будет ли какой то прирост эффективности, или можно положиться на QString?
|
|
|
|
|