powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Глобальный reference counter для нескольких процессов?
25 сообщений из 84, страница 2 из 4
Глобальный reference counter для нескольких процессов?
    #40075027
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
А вот если организовать что-то такое:

1) простенькой COM-объект
2) и пусть каждое приложение создаёт себе его экземпляр
3) у COM-объекта пусть будет событие (не знаю, возможно такое), связанное с изменением числа инстансов и обработчик этого события и есть искомая фишка
тоже самое что и в 22329725
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075033
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где ТС?
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075039
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Каждый процесс создаёт в заведомо известном каталоге временный файл (флаг FILE_FLAG_DELETE_ON_CLOSE) и подписывается на изменения содержимого каталога.
Всё. Телемаркет.
Возможно, надо дополнить мысль: каждый процесс создает уникальный файл и, получая уведомления об изменении в ФС, считает кол-во файлов. Все форс-мажоры отдаются на откуп ОСи.
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075042
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

семафоры

+1
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075046
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне уже интересно: как это реализовать на семафорах? Раз плюсуют, значит знают способ...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075053
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор невовремя пропал, конечно.
Квейд
Хочу решить такую задачу - мне нужно отреагировать в момент,
когда пользователь закрывает два экземляра, и остается только один (последний).

Для этого reference counter не нужен.
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075057
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а где ТС?
Он своё дело сделал
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075059
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это стародавний товарищ, а не тролль-новобранец. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075060
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Barmaley57
Каждый процесс создаёт в заведомо известном каталоге временный файл (флаг FILE_FLAG_DELETE_ON_CLOSE) и подписывается на изменения содержимого каталога.
Всё. Телемаркет.
Возможно, надо дополнить мысль: каждый процесс создает уникальный файл и, получая уведомления об изменении в ФС, считает кол-во файлов. Все форс-мажоры отдаются на откуп ОСи.
Ситуация. Папка пустая. Два процесса запускаются одновременно.
Если будут считать файлы перед созданием своего - будут считать себя главными оба.
Если после - то оба будут считать себя НЕглавными (с большой вероятностью).
Каша какая-то, по нотификации изменений следить...
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075061
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а где ТС?

Сделал всё на семафорах после первого коммента :)
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075062
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Да, вроде, ничего сложного.
https://delphi.cjcsoft.net/viewthread.php?tid=47350
Семафор, он же именованный и уникальный для всей системы.
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075065
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя я бы еще проще поступил (для твоей задачи). Возможно, это тупо...
Но просто писал бы реестр нужную циферку. А реестр, один фиг в памяти болтается. Так, что все весьма шустро.
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075067
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentДа, вроде, ничего сложного.

Только тамошний пример не имеет ничего общего с задачей топика...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075069
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Ситуация. Папка пустая. Два процесса запускаются одновременно.
Ну и пусть запускаются, хоть три. В чем проблема?
Потом ТС ничего не говорил про главный/не главный.
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075074
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если сделать dll-библиотеку со счётчиком и делать InterlockedIncrement() при DLL_PROCESS_ATTACH и InterlockedDecrement() при DLL_PROCESS_DETACH. А когда он станет равен 1 взводить какой-нибудь Event?..
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075078
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА если сделать dll-библиотеку со счётчиком

У библиотеки, загруженной в разные процессы, уже лет 25 как нет общего сегмента данных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075079
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
InterlockedIncrement()
чего?
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075081
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

alekcvpА если сделать dll-библиотеку со счётчиком

У библиотеки, загруженной в разные процессы, уже лет 25 как нет общего сегмента данных.
Они то как раз общие, пока читаешь. А потом COPY_ON_WRITE и усё
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075083
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
У меня идея такая, как вариант.
1. Пытаемся создать серверный сокет на определенный порт.
2. Если получилось - ты единственная (главная) программа.
3. Если не получилось - пытаемся подключиться к такому серверу. Подключились, и начинаем вечно чего-то ждать от сервера. Как придет ошибка (сервер закрылся) - возвращаемся в п. 1.
На локальных сокетах должно всё мгновенно отрабатывать по идее, даже если жОстко снять процесс сервера.

Лучше заменить на именованный пайп.
Плюс в том, что нет коллизии с другим софтом, который вдруг будет слушать именно этот порт.
Либо можно бродкастить UDP сообщения по типу UPNP протокола. Или сообщения рассылать (периодически пингуя главного)
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075084
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Virtual StudentДа, вроде, ничего сложного.

Только тамошний пример не имеет ничего общего с задачей топика...

Там и с mutex'ом пример в конце...
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075085
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentТам и с mutex'ом пример в конце...

Да хоть с чёртом с рогами. Покажите на пальцах как на семафоре и/или мутексе сделать
счётчик ссылок с сигнализацией достижения единицы или хотя бы нуля, устойчивый к
TerminateProcess.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075086
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
YuRock
У меня идея такая, как вариант.
1. Пытаемся создать серверный сокет на определенный порт.
2. Если получилось - ты единственная (главная) программа.
3. Если не получилось - пытаемся подключиться к такому серверу. Подключились, и начинаем вечно чего-то ждать от сервера. Как придет ошибка (сервер закрылся) - возвращаемся в п. 1.
На локальных сокетах должно всё мгновенно отрабатывать по идее, даже если жОстко снять процесс сервера.

Лучше заменить на именованный пайп.
Плюс в том, что нет коллизии с другим софтом, который вдруг будет слушать именно этот порт.
Либо можно бродкастить UDP сообщения по типу UPNP протокола.

Мдя...
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075096
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Создаем мьютекс:
Код: pascal
1.
Mutex:=OpenMutex(MUTEX_MODIFY_STATE,false,'Имя мьютекса');


Проверяем его владельца:
Код: pascal
1.
2.
3.
4.
5.
6.
if Mutex = 0 then
  begin
    CloseHandle(Mutex);
    ShowMessage('Вместо этого делаем что хотим.');
    exit;
  end;


Или тебе необходимо точное количество запущенных копий приложения?
Вот еще ресурс по теме: https://streletzcoder.ru/rabota-s-myuteksami-v-stile-oop-delphi-tmutex/
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075100
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Student, и как это поможет прореагировать в тот момент, когда горец отрубит предпоследнюю голову?
...
Рейтинг: 0 / 0
Глобальный reference counter для нескольких процессов?
    #40075104
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Student

Код: pascal
1.
2.
3.
4.
if Mutex = 0 then
  begin
    CloseHandle(Mutex);
  end;


Так да, всё будет работать прекрасно, согласен.
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 2 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Глобальный reference counter для нескольких процессов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]