Как определить, остановлена ​​ли программа каким-либо образом - PullRequest
0 голосов
/ 06 апреля 2020

Итак, у меня есть программа в windows, которая опирается друг на друга. И у меня есть al oop, который проверяет определенное условие и порождает GTime_mod.exe, если условие выполняется. Как вы можете видеть в моем коде ниже, он имеет переменную aux, поступающую из базы данных, значение переменной по умолчанию равно 1. Теперь, если выполняется GTime_mod.exe, а затем, когда пользователь смог дать правильное имя пользователя и пароль, значение из aux изменится на 0. Затем при выходе пользователя из системы aux снова изменится на 1. Теперь моя проблема в том, что я не хочу, чтобы значение aux снова менялось на 1, кроме выхода из системы. Потому что есть случаи, когда пользователь **[case 1]** просто нажимает кнопку (X), чтобы закрыть программу. Или пользователь **[case 2]** может остановить программу, нажав Ctrl + C. И наконец **[case 3]** пользователь может закрыть программу через диспетчер задач. Может кто-нибудь, пожалуйста, помогите мне или дайте мне предложение о том, как решить эту проблему, ваша помощь будет высоко оценена. наиболее вероятный сценарий

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Переместите код, который изменяет значение обратно на 1, в функцию и зарегистрируйте функцию с помощью atexit, чтобы она всегда вызывалась при выходе из программы.

1 голос
/ 06 апреля 2020

Из прочтения документации spawnl вы можете получить значение выхода, используя флаг P_WAIT.

Так что вам просто нужно проверить это значение ответа:

int exit_val;

[...]

exit_val = spawnl( P_WAIT, "GTime_mod.exe","GTime_mod.exe", NULL, NULL);
if ( exit_val == 1 ) 
{
  // manage exit
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...