Size: a a a

2020 July 22

AS

Anatoly Shirokov in Qt
Побитый Кирпич
Хмм, а могло ли это работать на винде потому что там case insensitive?
Конечно
источник

IZ

Ilia Zviagin in Qt
ew
Как я понял, мало смысла из-за того, что потоки будут тормозиться из-за этого, особенно если запись не в локальный файл пойдёт (а логирование все же должно быть универсально изначально написано), верно?
Если первое верно, то как я понял - нужен отдельный поток под логер, который из одного места будет писать в файл, а в себя уже принимать данные для записи из разных потоков. И внутри должно быть два массива для этих данных - один доступен для добавления новых данных, а из второго они записываются в файл. И по итогу лок мьютекса происходит только при смене ролей этих двух массивов и при добавлении данных в массив для добавления, так оно?
Только я не могу понять как в таком случае контролировать случай, когда массив для записи становится слишком большим.
Смысл в том что io намного медленнее CPU, и все твои потоки записи будут тупо ждать как диск один за другим будет записывать блоки.
источник

e

ew in Qt
Ilia Zviagin
Смысл в том что io намного медленнее CPU, и все твои потоки записи будут тупо ждать как диск один за другим будет записывать блоки.
Принял. А вторую часть я правильно понял, как стоит реализовать?
источник

IZ

Ilia Zviagin in Qt
ew
Как я понял, мало смысла из-за того, что потоки будут тормозиться из-за этого, особенно если запись не в локальный файл пойдёт (а логирование все же должно быть универсально изначально написано), верно?
Если первое верно, то как я понял - нужен отдельный поток под логер, который из одного места будет писать в файл, а в себя уже принимать данные для записи из разных потоков. И внутри должно быть два массива для этих данных - один доступен для добавления новых данных, а из второго они записываются в файл. И по итогу лок мьютекса происходит только при смене ролей этих двух массивов и при добавлении данных в массив для добавления, так оно?
Только я не могу понять как в таком случае контролировать случай, когда массив для записи становится слишком большим.
Остальное я не понял ничего
источник

RG

Renat Garaev in Qt
Ilia Zviagin
Остальное я не понял ничего
Наверное, тут больше на философские размышления. можем ли гарантировать что при отсутствии внешних вмешательств, не будет испорчена нить процесса....
(я  тоже не понял
источник

e

ew in Qt
Ilia Zviagin
Остальное я не понял ничего
1. Чтобы не тормозить потоки записью, нужно сделать отдельный поток для записи
2. Этот поток должен принимать информацию для записи от других потоков
3. Этот поток должен записывать информацию в файл
4. Решение я понял должно быть примерно такое:
Есть две переменных по типу QStringList. Одна из этих переменных нужна для добавления информации (пункт 2), вторая для записи (пункт 3) - отсюда у нас 2 роли переменных (принятие информации и выгрузка в файл). Изначально переменная 1 служит для принятия, а переменная 2 для записи.
Когда поток логирования записал информацию из переменной 2, то он блокирует мьютекс, меняет роли у переменных и разблокирует мьютекс.
Когда другой поток хочет добавить информацию для записи, он блокирует мьютекс, добавляет данные в переменную с ролью «принятие информации» и разблокирует мьютекс

Надеюсь, сейчас более понятно объяснил свою идею
источник

ПК

Побитый Кирпич... in Qt
ew
1. Чтобы не тормозить потоки записью, нужно сделать отдельный поток для записи
2. Этот поток должен принимать информацию для записи от других потоков
3. Этот поток должен записывать информацию в файл
4. Решение я понял должно быть примерно такое:
Есть две переменных по типу QStringList. Одна из этих переменных нужна для добавления информации (пункт 2), вторая для записи (пункт 3) - отсюда у нас 2 роли переменных (принятие информации и выгрузка в файл). Изначально переменная 1 служит для принятия, а переменная 2 для записи.
Когда поток логирования записал информацию из переменной 2, то он блокирует мьютекс, меняет роли у переменных и разблокирует мьютекс.
Когда другой поток хочет добавить информацию для записи, он блокирует мьютекс, добавляет данные в переменную с ролью «принятие информации» и разблокирует мьютекс

Надеюсь, сейчас более понятно объяснил свою идею
Возьми готовую конкурентную очередь
источник

ПК

Побитый Кирпич... in Qt
Отдельный поток из неё читает и ждёт если нет данных, другие потоки в неё пишут
источник

e

ew in Qt
Побитый Кирпич
Возьми готовую конкурентную очередь
Как я понимаю, это замена двух переменных и мьютекса? Но тогда это не совсем отвечает на мое изначальное опасение - что, если место для данных слишком сильно раздуется, не успевая сгружать информацию куда-либо?
источник

IZ

Ilia Zviagin in Qt
ew
1. Чтобы не тормозить потоки записью, нужно сделать отдельный поток для записи
2. Этот поток должен принимать информацию для записи от других потоков
3. Этот поток должен записывать информацию в файл
4. Решение я понял должно быть примерно такое:
Есть две переменных по типу QStringList. Одна из этих переменных нужна для добавления информации (пункт 2), вторая для записи (пункт 3) - отсюда у нас 2 роли переменных (принятие информации и выгрузка в файл). Изначально переменная 1 служит для принятия, а переменная 2 для записи.
Когда поток логирования записал информацию из переменной 2, то он блокирует мьютекс, меняет роли у переменных и разблокирует мьютекс.
Когда другой поток хочет добавить информацию для записи, он блокирует мьютекс, добавляет данные в переменную с ролью «принятие информации» и разблокирует мьютекс

Надеюсь, сейчас более понятно объяснил свою идею
1, так делают, да.
источник

IZ

Ilia Zviagin in Qt
ew
1. Чтобы не тормозить потоки записью, нужно сделать отдельный поток для записи
2. Этот поток должен принимать информацию для записи от других потоков
3. Этот поток должен записывать информацию в файл
4. Решение я понял должно быть примерно такое:
Есть две переменных по типу QStringList. Одна из этих переменных нужна для добавления информации (пункт 2), вторая для записи (пункт 3) - отсюда у нас 2 роли переменных (принятие информации и выгрузка в файл). Изначально переменная 1 служит для принятия, а переменная 2 для записи.
Когда поток логирования записал информацию из переменной 2, то он блокирует мьютекс, меняет роли у переменных и разблокирует мьютекс.
Когда другой поток хочет добавить информацию для записи, он блокирует мьютекс, добавляет данные в переменную с ролью «принятие информации» и разблокирует мьютекс

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

IZ

Ilia Zviagin in Qt
ew
1. Чтобы не тормозить потоки записью, нужно сделать отдельный поток для записи
2. Этот поток должен принимать информацию для записи от других потоков
3. Этот поток должен записывать информацию в файл
4. Решение я понял должно быть примерно такое:
Есть две переменных по типу QStringList. Одна из этих переменных нужна для добавления информации (пункт 2), вторая для записи (пункт 3) - отсюда у нас 2 роли переменных (принятие информации и выгрузка в файл). Изначально переменная 1 служит для принятия, а переменная 2 для записи.
Когда поток логирования записал информацию из переменной 2, то он блокирует мьютекс, меняет роли у переменных и разблокирует мьютекс.
Когда другой поток хочет добавить информацию для записи, он блокирует мьютекс, добавляет данные в переменную с ролью «принятие информации» и разблокирует мьютекс

Надеюсь, сейчас более понятно объяснил свою идею
Про переменные 1,2 - да, смешно... 😊
источник

IZ

Ilia Zviagin in Qt
ew
Как я понимаю, это замена двух переменных и мьютекса? Но тогда это не совсем отвечает на мое изначальное опасение - что, если место для данных слишком сильно раздуется, не успевая сгружать информацию куда-либо?
Ну, ничего страшного, казалось бы, потеряешь логи... Мне кажется это неприемлемо, но иногда так надо, иначе вообще ничего логироваться не будет.

В общем, обычные весы...
источник

e

ew in Qt
Ilia Zviagin
Но для логирования это все не подходит, хотя некоторые так для логирования делают.
IMHO логирования должно быть персистентным.
Вызвал .log() - хоть умри, но запись должна быть записана в лог. Но это будет медленно.
То есть все же каждый поток должен сам логироваться в файл?
источник

IZ

Ilia Zviagin in Qt
ew
То есть все же каждый поток должен сам логироваться в файл?
Не знаю... Тут должен каждый сам решать
источник

IZ

Ilia Zviagin in Qt
Всем привет! Не знаю оффтоп или нет, но не могу решить одну проблему. Почему пишет что нет китов? Гуглил, говорят нужно указать файл qmake.exe из папки qt-creator. Но у меня нет такого файла нигде :/ Где его взять? https://prnt.sc/tmc7qi
источник

IZ

Ilia Zviagin in Qt
Ilia Zviagin
Всем привет! Не знаю оффтоп или нет, но не могу решить одну проблему. Почему пишет что нет китов? Гуглил, говорят нужно указать файл qmake.exe из папки qt-creator. Но у меня нет такого файла нигде :/ Где его взять? https://prnt.sc/tmc7qi
Kit-ов нет, потому что не поставил
источник

v

vendent in Qt
Ilia Zviagin
Kit-ов нет, потому что не поставил
А как их ставить?
источник

RL

Roman Levkovych𓅝 in Qt
vendent
А как их ставить?
открой настройки, там есть kits и посмотри, чего нету, тогда все начнет работать
источник

v

vendent in Qt
почему не могу связать?
источник