Я делаю приложение для Mac OS X в Qt и хотел создать поток, который не закрывается при закрытии приложения.

Это возможно? Если да, то как? Я не хочу, чтобы процесс останавливался, если пользователь принудительно закрывает приложение.

Заранее спасибо.

Примечание. Если это невозможно, могу ли я это сделать? (Может быть, с вызовом команды в bash?)

2
Flare Cat 7 Сен 2016 в 23:13

3 ответа

Лучший ответ

Можно достичь своей цели, запустив новый процесс через QProcess :: startDetached, согласно документам http://doc.qt.io/qt-4.8/qprocess.html#startDetached

Запускает программу с аргументами arguments в новом процессе и отсоединяется от него. Возвращает истину в случае успеха; в противном случае возвращает false. Если вызывающий процесс завершится, отключенный процесс продолжит работу .

Unix: запущенный процесс будет работать в собственном сеансе и действовать как демон.

Изменить:

Вот пример для MacOS

// run start script
QString scriptPath = "path-to-start-script/start.sh" ;
QString cmd = "open -a " + scriptPath;
QProcess::startDetached(cmd);
3
Community 20 Июн 2020 в 09:12

Когда вы завершаете процесс, все потоки в этом процессе умирают - процесс является «контейнером» потока. Если вы хотите создать что-то, что продолжает существовать за пределами вашего текущего процесса, создайте новый независимый процесс.

2
Jesper Juhl 7 Сен 2016 в 20:27

Если вы имеете в виду закрытие окна Gui с помощью "Application Close", то это можно легко сделать ...

#include "MainWindow.h"
#include <QApplication>

//////////////////////////////////////
#include <thread>
struct blabla {
    std::thread th;
    blabla():th([]{
        // body of your thread  
    }) {}
    ~blabla(){
        if(th.joinable())
            th.join();
    }   
} singleton_obj;
/////////////////////////////////////

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Теперь окно приложения закроется, но поток демона будет работать в фоновом режиме ... Наслаждайтесь

-1
pPanda_beta 8 Сен 2016 в 18:57