Russian Qt Forum
Ноябрь 26, 2024, 01:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Одновременная запись в файл  (Прочитано 5417 раз)
merke
Гость
« : Апрель 03, 2012, 16:42 »

Всем привет!

Есть консольное приложение, которое запускает php скрипт, в параметрах передает некие идентификаторы, приложение должно открыть файл на чтение сначала, считать от туда реестр, если там не находится полученный идентификатор добавляет его и вписывает его значение единичку, если находит то инкриментирует значение и заново всё это сохраняет на диск. Так вот может получится ситуация, что моё приложение будет запущенно дважды или более в один момент времени, будут траблы как понимаете. Как быть с этим? Подскажите, пожалуйста!
Записан
V1KT0P
Гость
« Ответ #1 : Апрель 03, 2012, 16:49 »

Всем привет!

Есть консольное приложение, которое запускает php скрипт, в параметрах передает некие идентификаторы, приложение должно открыть файл на чтение сначала, считать от туда реестр, если там не находится полученный идентификатор добавляет его и вписывает его значение единичку, если находит то инкриментирует значение и заново всё это сохраняет на диск. Так вот может получится ситуация, что моё приложение будет запущенно дважды или более в один момент времени, будут траблы как понимаете. Как быть с этим? Подскажите, пожалуйста!
1) Запретить одновременный запуск программы.
2) Открыть файл с параметрами запрещающими другим тоже его открывать.
Записан
merke
Гость
« Ответ #2 : Апрель 03, 2012, 16:50 »

спасибо, но не вариант
Записан
V1KT0P
Гость
« Ответ #3 : Апрель 03, 2012, 16:55 »

спасибо, но не вариант
3) Ставить глобальный мьютекс с именем идентификатора на время его использования.
4) Определять что запущена твоя же программа и через сокеты координировать действия.
Записан
merke
Гость
« Ответ #4 : Апрель 03, 2012, 16:56 »

Во, это уже интереснее, ни разу не юзал такое, можно малюсенький пример, если у вас есть время
Записан
V1KT0P
Гость
« Ответ #5 : Апрель 03, 2012, 16:59 »

Во, это уже интереснее, ни разу не юзал такое, можно малюсенький пример, если у вас есть время
Тебе про что про глобальные мьютексы или про сокеты? =).
На винде использовал как-то WinApi функцию CreateMutex, которая принимает в качестве параметра строку.
Записан
merke
Гость
« Ответ #6 : Апрель 03, 2012, 17:00 »

В данном проекте категорически не использую сокеты, операционная система Debian
Записан
merke
Гость
« Ответ #7 : Апрель 03, 2012, 17:02 »

Думаю может QSharedMemory использовать, но блин должно быть что то очень надежное и более простое
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #8 : Апрель 03, 2012, 17:16 »

Можешь еще глянуть в сторону

Код:
QLocalServer
QLocalSocket

классов, создает локальный сервер по имени, не вдавался как работает. Так же по имени проверяешь коннект, если коннект есть значит прога запущена. Можно и передать ей что то по необходимости.
Записан
V1KT0P
Гость
« Ответ #9 : Апрель 03, 2012, 17:20 »

В данном проекте категорически не использую сокеты, операционная система Debian
В Линуксе есть semget.

Еще можешь тупо во временной папке создавать пустые файлы, которые будут играть роль мьютексов =).
« Последнее редактирование: Апрель 03, 2012, 17:22 от V1KT0P » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 23.