Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ При завершении консоли, завершение другого приложения/процесса c++

  • Автор темы Автор темы cazzual
  • Дата начала Дата начала
already
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
381
Реакции
42
В общем, при запуске консоли, у меня запускается вторая консоль, лежащая с первой в одной папке
Код:
Expand Collapse Copy
 system("start console2.exe");
Запуск второй консоли, при запуске первой - дело простое) Но как теперь закрывать вторую, при завершении первой - не понял)

edit:
Слишком мало знаю в ++, пойду гуглить дополнительно

edit2:
Конкретно как просто завершить второй, я знаю. Но как сделать проверку на работу первой - нет)
 
Последнее редактирование:

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.


Если ты хочешь, что бы у тебя при запуске console1 запускалось console2, и при закрытии console1, console2 закрывалась.
То смотри.
в console1 в мейн пихаешь код
C++:
Expand Collapse Copy
system("start console2.exe");
в console2 создаёшь новый поток, и пихаешь туда это
C++:
Expand Collapse Copy
bool isProcessRun(char *processName)
{
    HANDLE hSnap = NULL;
    PROCESSENTRY32 pe32;
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap!=NULL)
    {
        if (Process32First(hSnap, &pe32))
        {
            if (strcmp(pe32.szExeFile,processName) == 0)
                return TRUE;
            while (PProcess32Next(hSnap, &pe32))
                if (strcmp(pe32.szExeFile,processName) == 0)
                    return TRUE;
        }
    }
    CloseHandle(hSnap);
    return FALSE;
}
DWORD WINAPI secondthread( LPVOID lpParam ) {
    while(isProcessRun("console1.exe")) {
     
    }
    exit(1);
}
Если надо более подробно обьяснить, то напиши в личку югейма, там проще будет.
 
Если надо более подробно обьяснить, то напиши в личку югейма, там проще будет.
Попробую для начала сам немного разобраться)
И за помощь - спасибо!
 
Скрытое содержимое
Если ты хочешь, что бы у тебя при запуске console1 запускалось console2, и при закрытии console1, console2 закрывалась.
То смотри.
в console1 в мейн пихаешь код
C++:
Expand Collapse Copy
system("start console2.exe");
в console2 создаёшь новый поток, и пихаешь туда это
C++:
Expand Collapse Copy
bool isProcessRun(char *processName)
{
    HANDLE hSnap = NULL;
    PROCESSENTRY32 pe32;
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap!=NULL)
    {
        if (Process32First(hSnap, &pe32))
        {
            if (strcmp(pe32.szExeFile,processName) == 0)
                return TRUE;
            while (PProcess32Next(hSnap, &pe32))
                if (strcmp(pe32.szExeFile,processName) == 0)
                    return TRUE;
        }
    }
    CloseHandle(hSnap);
    return FALSE;
}
DWORD WINAPI secondthread( LPVOID lpParam ) {
    while(isProcessRun("console1.exe")) {
    
    }
    exit(1);
}
Если надо более подробно обьяснить, то напиши в личку югейма, там проще будет.
Это костыль.

Насколько я помню, если ты напрямую откроешь программу (без cmd), то твоя программа будет для нее родительской, а та дочерней. При закрытии родительской программы, все дочернии автоматически закрываются.
 
Это костыль.

Насколько я помню, если ты напрямую откроешь программу (без cmd), то твоя программа будет для нее родительской, а та дочерней. При закрытии родительской программы, все дочернии автоматически закрываются.
Ну тогда юзаем это как старт прогии всё....
C++:
Expand Collapse Copy
TCHAR   cmd[] = L"console2.exe 123.txt";
CreateProcess(NULL, cmd,NULL, NULL, FALSE,0, NULL, NULL, &si, &pi);
 
В общем, при запуске консоли, у меня запускается вторая консоль, лежащая с первой в одной папке
Код:
Expand Collapse Copy
 system("start console2.exe");
Запуск второй консоли, при запуске первой - дело простое) Но как теперь закрывать вторую, при завершении первой - не понял)

edit:
Слишком мало знаю в ++, пойду гуглить дополнительно

edit2:
Конкретно как просто завершить второй, я знаю. Но как сделать проверку на работу первой - нет)

Вариантов много, например: повесить коллбек на закрытие своего процесса, создать пайп сокет, создать мутекс и проверять, а валиден ли он, второй прилке, после создания процесса, вызвать NtQueryInformationProcess, найти родителя, создать поток и в нем проверять GetExitCodeProcess.
 
Но как сделать проверку на работу первой - нет
У каждого процесса есть идентификатор.
Создавай процесс через стандартный апи CreateProcess и сможешь знать его идентификатор, а лучше хэндл (потому что идентификаторы могут переиспользоваться).
В принципе можно создать отдельный поток, и ждать там по этому хэндлу бесконечно через WaitForSingleObject(), и затем завершаться, вполне реально сделать их взаимозависимыми.
 
Назад
Сверху Снизу