crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Как определить запуск второго приложения ?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
SABROG Дата 28.11.2009, 2:16
 
Цитата(Cergey @ 27.11.2009, 19:06) *
для быстрой сдачи пригодится.

Вот оказывается для чего программирование нужно, для быстрой сдачи! А я то дурак уже не учусь, а всё сдаю и сдаю из-за интереса...
Cergey Дата 27.11.2009, 19:06
  "Добавлю сюда код с определением запуска через сокеты на WinAPI"
Перепутал: не сокеты, а мьютексы!!!
Litkevich Yuriy, для быстрой сдачи пригодится.
Litkevich Yuriy Дата 27.11.2009, 19:03
  всё таки это всё какие-то извраты. Лучше использовать отлаженную кросплатформенную библиотеку от самих тролей.
Пока она была не доступна по LGPL, люди делали её аналог, и проверили кучу механизмов которые работали бы всюду. в Том числе и в многопользовательской среде.
Cergey Дата 27.11.2009, 19:00
  Добавлю сюда код с определением запуска через сокеты на WinAPI. Просто что-бы другие(и я) не искали после прочтения темы в гугле это.
HANDLE hnd = CreateMutex(NULL, TRUE, m_pszAppName);
if ( GetLastError() == ERROR_ALREADY_EXISTS && WAIT_ABANDONED != WaitForSingleObject(hnd, 1000))
{
AfxMessageBox("Application already running. ");
return FALSE;
}

Взято с http://forum.ixbt.com/topic.cgi?id=40:682

Стати для тех кто первый раз видит WinAPI
m_pszAppName - unicode строка
В QT для быстрого перевода можно использовать

QString text = "Lab 2 Server"; // Имя приложения
TCHAR* m_pszAppName = (TCHAR *)text.unicode(); // Имя в формате Unicode
flankerr Дата 10.6.2009, 11:36
  Повторюсь,если использовать шаредМемори то пропадает всякий смысл в сокетах.
Кстати недостатки описанной мной выше идеи с файлами убераються использованием ШаредМемори
BRE Дата 8.6.2009, 17:24
 
Цитата(flankerr @ 8.6.2009, 17:46) *
Что то не понравился мне SingleApplication. Во первых он работает только под Qt 4.4 и выше. Во вторых юзает ШаредМемори. Спрашивается зачем тогда сокеты, а если есть сокеты то зачем ШаредМемори - в общем намудрил не понравилось.

Юра выше писал, автор SingleApplication известен, спроси у него для чего используется SharedMemory. Помниться, читал ветку посвященную этому компоненту, там вроде были какие-то косяки с сокетами на Mac'е.
flankerr Дата 8.6.2009, 16:46
  Что то не понравился мне SingleApplication. Во первых он работает только под Qt 4.4 и выше. Во вторых юзает ШаредМемори. Спрашивается зачем тогда сокеты, а если есть сокеты то зачем ШаредМемори - в общем намудрил не понравилось.
Litkevich Yuriy Дата 5.6.2009, 15:29
  рекомендую на прогорге почитать ветку Константина, автора SingleApplication (не Qtишного), там много обсуждений о принципах работы, да и автора можно распросить поподробнее.

Ссылка
Sokoloff Дата 5.6.2009, 15:25
  А через список процессов нельзя определить есть запущенные копии? Да решение не кроссплатформенное, но IMHO самое прямое, или есть какие-то подводные камни?
flankerr Дата 5.6.2009, 15:03
  тут ты пошёл дальше :) Мне надо просто знать есть ли запущенные копии или нет. Т.е. вполне допускается ситуация когда работает несколько копий программы. Для этого вполне лдостаточно метки времени и счётчика. Каждая клпия раз в заданный промежуток обновляет метку времени что свидетельствует о валидность информации в файле.

Устанавливать каждому приложению уникальный номер слишком излишне. Тут нет задачи мониторить упало\не упало.

А вот одновременный доступ на запись из несольких приложений тут тонкое место... возможно шаредМемори болеее луший вариант но его нет в Qt 4.3.3 а переходить на более новые версии нельзя.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 5.12.2021, 3:22