Russian Qt Forum
Ноябрь 26, 2024, 01:28
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Одновременная запись в файл
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Одновременная запись в файл (Прочитано 5419 раз)
merke
Гость
Одновременная запись в файл
«
:
Апрель 03, 2012, 16:42 »
Всем привет!
Есть консольное приложение, которое запускает php скрипт, в параметрах передает некие идентификаторы, приложение должно открыть файл на чтение сначала, считать от туда реестр, если там не находится полученный идентификатор добавляет его и вписывает его значение единичку, если находит то инкриментирует значение и заново всё это сохраняет на диск. Так вот может получится ситуация, что моё приложение будет запущенно дважды или более в один момент времени, будут траблы как понимаете. Как быть с этим? Подскажите, пожалуйста!
Записан
V1KT0P
Гость
Re: Одновременная запись в файл
«
Ответ #1 :
Апрель 03, 2012, 16:49 »
Цитата: Александр от Апрель 03, 2012, 16:42
Всем привет!
Есть консольное приложение, которое запускает php скрипт, в параметрах передает некие идентификаторы, приложение должно открыть файл на чтение сначала, считать от туда реестр, если там не находится полученный идентификатор добавляет его и вписывает его значение единичку, если находит то инкриментирует значение и заново всё это сохраняет на диск. Так вот может получится ситуация, что моё приложение будет запущенно дважды или более в один момент времени, будут траблы как понимаете. Как быть с этим? Подскажите, пожалуйста!
1) Запретить одновременный запуск программы.
2) Открыть файл с параметрами запрещающими другим тоже его открывать.
Записан
merke
Гость
Re: Одновременная запись в файл
«
Ответ #2 :
Апрель 03, 2012, 16:50 »
спасибо, но не вариант
Записан
V1KT0P
Гость
Re: Одновременная запись в файл
«
Ответ #3 :
Апрель 03, 2012, 16:55 »
Цитата: Александр от Апрель 03, 2012, 16:50
спасибо, но не вариант
3) Ставить глобальный мьютекс с именем идентификатора на время его использования.
4) Определять что запущена твоя же программа и через сокеты координировать действия.
Записан
merke
Гость
Re: Одновременная запись в файл
«
Ответ #4 :
Апрель 03, 2012, 16:56 »
Во, это уже интереснее, ни разу не юзал такое, можно малюсенький пример, если у вас есть время
Записан
V1KT0P
Гость
Re: Одновременная запись в файл
«
Ответ #5 :
Апрель 03, 2012, 16:59 »
Цитата: Александр от Апрель 03, 2012, 16:56
Во, это уже интереснее, ни разу не юзал такое, можно малюсенький пример, если у вас есть время
Тебе про что про глобальные мьютексы или про сокеты? =).
На винде использовал как-то WinApi функцию CreateMutex, которая принимает в качестве параметра строку.
Записан
merke
Гость
Re: Одновременная запись в файл
«
Ответ #6 :
Апрель 03, 2012, 17:00 »
В данном проекте категорически не использую сокеты, операционная система Debian
Записан
merke
Гость
Re: Одновременная запись в файл
«
Ответ #7 :
Апрель 03, 2012, 17:02 »
Думаю может QSharedMemory использовать, но блин должно быть что то очень надежное и более простое
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Одновременная запись в файл
«
Ответ #8 :
Апрель 03, 2012, 17:16 »
Можешь еще глянуть в сторону
Код:
QLocalServer
QLocalSocket
классов, создает локальный сервер по имени, не вдавался как работает. Так же по имени проверяешь коннект, если коннект есть значит прога запущена. Можно и передать ей что то по необходимости.
Записан
V1KT0P
Гость
Re: Одновременная запись в файл
«
Ответ #9 :
Апрель 03, 2012, 17:20 »
Цитата: Александр от Апрель 03, 2012, 17:00
В данном проекте категорически не использую сокеты, операционная система Debian
В Линуксе есть semget.
Еще можешь тупо во временной папке создавать пустые файлы, которые будут играть роль мьютексов =).
«
Последнее редактирование: Апрель 03, 2012, 17:22 от V1KT0P
»
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...