Russian Qt Forum
Апрель 18, 2024, 21:50
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Чтение и запись в файл в разных потоках
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Чтение и запись в файл в разных потоках (Прочитано 4275 раз)
demaker
Птица говорун
Offline
Сообщений: 960
Чтение и запись в файл в разных потоках
«
:
Сентябрь 08, 2021, 21:06 »
Всем доброго времени суток!
Встал вопрос чтения и записи в разных потоках.
Ответ кажется очевидным.
Берем файл мьючим его и читаем в одном потоке,
а в другом пишем.
Но это кажется как-то не очень хорошей идей.
Может есть какой-нибудь варинт асинхронного чтения и записи?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Чтение и запись в файл в разных потоках
«
Ответ #1 :
Сентябрь 09, 2021, 06:41 »
Цитата: demaker от Сентябрь 08, 2021, 21:06
Но это кажется как-то не очень хорошей идей.
А почему?
Цитата: demaker от Сентябрь 08, 2021, 21:06
Может есть какой-нибудь варинт асинхронного чтения и записи?
Не вижу откуда им взяться. Ну если неск "читателей", то ReadWriteLock - но здесь и это не проходит т.к. каждому нужна своя позиция в файле
Записан
demaker
Птица говорун
Offline
Сообщений: 960
Re: Чтение и запись в файл в разных потоках
«
Ответ #2 :
Сентябрь 09, 2021, 07:37 »
Цитата: Igors от Сентябрь 09, 2021, 06:41
Цитата: demaker от Сентябрь 08, 2021, 21:06
Но это кажется как-то не очень хорошей идей.
А почему?
Цитата: demaker от Сентябрь 08, 2021, 21:06
Может есть какой-нибудь варинт асинхронного чтения и записи?
Не вижу откуда им взяться. Ну если неск "читателей", то ReadWriteLock - но здесь и это не проходит т.к. каждому нужна своя позиция в файле
Читаем из файла блоки информации определенного размера. Пишем естественно только в конец файла.
Поток на чтение
Код:
mutex_file.lock() ;
file. seek(pos) ;
file. read(but, size_block) ;
mutex_file.unlock() ;
Код:
mutex_file.lock() ;
file. seek(end_file) ;
file.write(buf, size_buf);
mutex_file.unlock() ;
Стоит ли открывать и закрывать файл в потоках?
«
Последнее редактирование: Сентябрь 09, 2021, 08:36 от demaker
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Чтение и запись в файл в разных потоках
«
Ответ #3 :
Сентябрь 09, 2021, 08:50 »
Цитата: demaker от Сентябрь 09, 2021, 07:37
Пишем естественно только в конец файла.
Это проще но не так уж естественно
Цитата: demaker от Сентябрь 09, 2021, 07:37
Стоит ли открывать и закрывать файл в потоках?
Ни в коем случае. Файл должен быть открыт один раз по чтению-записи.
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Чтение и запись в файл в разных потоках
«
Ответ #4 :
Сентябрь 15, 2021, 13:53 »
Можно задействовать файловые потоки. Не уверен, что можно натравить два потока на один файл..
Записан
Vidos
Новичок
Offline
Сообщений: 6
Re: Чтение и запись в файл в разных потоках
«
Ответ #5 :
Октябрь 26, 2021, 19:14 »
Сдаётся мне, что вы всё усложняете.
У файла, в один момент, может быть только одна позиция чтения/записи. Никак не получится одновременно читать кусок данных от куда-то с одной позиции и писать данные в другую позицию. По этому, это однозначно глухая блокировка файла в момент чтения/записи.
По этому задача делится на две части: фоновая работа с данными, после того как данные обработаны (подготовлены), запись в файл в файл с его блокировкой.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Чтение и запись в файл в разных потоках
«
Ответ #6 :
Октябрь 26, 2021, 19:18 »
Цитата: Vidos от Октябрь 26, 2021, 19:14
У файла, в один момент, может быть только одна позиция чтения/записи.
Да ну перестаньте, одна.
Попробуйте сами, открыть один файл из разных потоков и читать по случайным смещениям.
Или в один поток, но запустите несколько процессов, которые будут читать один файл.
Записан
Vidos
Новичок
Offline
Сообщений: 6
Re: Чтение и запись в файл в разных потоках
«
Ответ #7 :
Октябрь 26, 2021, 20:28 »
Цитата: Old от Октябрь 26, 2021, 19:18
Цитата: Vidos от Октябрь 26, 2021, 19:14
У файла, в один момент, может быть только одна позиция чтения/записи.
Да ну перестаньте, одна.
Попробуйте сами, открыть один файл из разных потоков и читать по случайным смещениям.
Или в один поток, но запустите несколько процессов, которые будут читать один файл.
Ну, если так пересмотреть задачу, то я с вами полностью согласен.
Параллельное чтение из одного файла разными процессами вполне нормально. Но я исходил из текущей задачи - несколько потоков, чтение-запись, один объект файла. А тут уже другие подходы требуется.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...