Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Запуск одного экземпляра программы.

Автор: shakil 10.12.2007, 18:22

Под виндой, чтобы не запускать более одного экземпляра приложения нужно сделать FindWindow и если такое окно есть, то делаем его активным, а новый экземпляр не запускаем.

Подобное можно сделать на Qt?

Автор: QCasper 10.12.2007, 22:30

Цитата(shakil @ 10.12.2007, 18:22) *
Под виндой, чтобы не запускать более одного экземпляра приложения нужно сделать FindWindow и если такое окно есть, то делаем его активным, а новый экземпляр не запускаем.

Подобное можно сделать на Qt?


В Qt Solutions есть что-то типа QSingleApplication, если я ничего не путаю. А что мешает использовать тот же самый FindWindow?

Автор: Mixolap 10.12.2007, 22:38

глянь тут:
http://qtfaq.ru/index.php?option=com_content&task=view&id=10&Itemid=26

Автор: QCasper 11.12.2007, 0:03

Цитата(Mixolap @ 10.12.2007, 22:38) *
глянь тут:
http://qtfaq.ru/index.php?option=com_content&task=view&id=10&Itemid=26


Ну вот, даже для opensource есть :)

Автор: shakil 11.12.2007, 8:42

Спасибо, оперативно помогли. :)

Автор: iluxa 26.2.2008, 18:43

Цитата(QCasper @ 11.12.2007, 0:03) *
Цитата(Mixolap @ 10.12.2007, 22:38) *
глянь тут:
http://qtfaq.ru/index.php?option=com_content&task=view&id=10&Itemid=26


Ну вот, даже для opensource есть :)

Уважаемые, не поделитесь ли классом =), ибо по ссылке ничего не найденно, т.к. сайт видимо реконструировали, и теперь там вообще подобного нет. Заранее Спасибо.

Автор: Tonal 27.2.2008, 8:52

У меня есть модуль для винды написанный на python-е.
Могу выложить, если кому надо. :-)

Автор: Litkevich Yuriy 27.2.2008, 9:03

я в Борланде делал через именованый мьютекс:

const char *NamedMutex = "ESPA Demon"; // именованный mutex

HANDLE CheckInstance( const char *Name)
{
HANDLE Mutex = CreateMutex(NULL,true,Name);

    int r = GetLastError();
    if (r) return 0;
    return Mutex;
}
//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HANDLE Mutex = CheckInstance(NamedMutex);

    if (!Mutex)
    {
        ShowMessage(" Приложение уже запущено! ");
        ReleaseMutex(Mutex);
        return 1;
    }
    
    try
    {
        Application->Initialize();
        Application->Title = "ESPA Demon";
        Application->CreateForm(__classid(TFrmMain), &FrmMain);
        Application->CreateForm(__classid(TFrmModBus), &FrmModBus);
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    return 0;
}


Где-то у кого-то, когда-то подсмотрел, может по аналогии и зделать в Qt'ях

Автор: Mixolap 27.2.2008, 9:13

Класс DSingleApplication может помочь.
http://qtfaq.ru/tiki-download_file.php?fileId=18

Автор: Litkevich Yuriy 27.2.2008, 9:38

Mixolap, он у тебя через порты реализован, а их может брандмауэр банить, я вот еще вариант нашел через http://www.qtcentre.org/forum/p-instance-of-an-application-is-running-or-not-post939/postcount5.html

Автор: Tonal 27.2.2008, 10:56

2 Litkevich Yuriy И причём тут экземпляр приложения?
По ссылке простейшая реализация синглетона для диалога, а приложений с такими диалогами можно наоткрывать пока память не закончиться. :-)

Автор: Litkevich Yuriy 27.2.2008, 11:04

Но ведь Instance() применим и к QApplication, может быть можно через него отслеживать запущеное приложение?

Автор: iluxa 27.2.2008, 14:12

Всем спасибо, пока вопрос отложен, за неимением подходящего результата =), жаль что QSingleApplication закрыт =(

Автор: Tonal 29.2.2008, 11:09

Цитата(Litkevich Yuriy @ 27.2.2008, 14:04) *
Но ведь Instance() применим и к QApplication, может быть можно через него отслеживать запущенное приложение?

Как? Магией?
Для того, чтобы приложения могли общаться между собой (отслеживание экземпляров это тоже общение) нужно чтобы кто-то обращался к сервисам операционной системы.
QApplication этого не делает.
Стало быть тебе нужно это сделать самостоятельно. По приведённой ссылке ничего похожего нет. :-)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)