Как проверить в C ++, если приложение уже запущено, прежде чем запускать новый экземпляр? - PullRequest
1 голос
/ 15 июля 2011

Я нашел несколько ссылок на реализацию, но только одно четкое описание в C ++ (статья Джозефа Ньюкомера http://www.flounder.com/nomultiples.htm#CreateMutex),, но это был (c) 1999 год, поэтому я немного неохотно использовал его, не проверив сначала, есть ли «новые / лучшие» способы сегодня.

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 июля 2011

Подойдет любой именованный объект, может быть файл, мьютекс, событие, почтовый ящик, порт TCP и т. Д. ERROR_ALREADY_EXISTS сообщает вам, существует ли экземпляр.

Для объектов в пространстве имен ядра Win32,с 1999 года произошло одно изменение - из-за служб терминалов теперь вы можете использовать префикс Global\ или Local\, чтобы указать, является ли это одним экземпляром на всем компьютере по сравнению с одним экземпляром на сеанс входа пользователя.Если вам нужно что-то более переносимое, то привязка порта TCP или создание файла и его эксклюзивная блокировка, как правило, хорошо работают в различных ОС.

0 голосов
/ 16 июля 2011

С тех пор не было никаких существенных улучшений.Впрочем, с момента публикации Usenet , которую я написал за несколько лет до этого, никаких существенных улучшений не было.

0 голосов
/ 16 июля 2011

Если вы программируете в Windows, стандартный способ сделать это - создать мьютекс в начале вашей программы.Мьютекс должен жить столько же, сколько и время жизни вашей программы, и в течение этого времени попытки создания мьютекса с тем же именем будут неудачными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...