J'ai créé une fenêtre simple avec deux boutons, le premier appelle une fonction qui dure longtemps, le second définit la valeur d'une variable "stop" à TRUE, initialement définie sur FALSE.Comment arrêter un processus en utilisant un "bouton d'arrêt"
Mon intention est que, en appuyant sur le premier bouton, il court un long processus, qui contrôle si la variable d'arrêt est réglé sur TRUE ou FALSE pour chaque boucle, si la valeur est la fonction doit retourner TRUE, de sorte que le le processus est arrêté.
...
static BOOL stop = FALSE; // My variable defined somewhere
...
int longProcess() // My function
{
while(stop == FALSE) {
// do something
}
return 0;
}
...
switch (msg)
{
case WM_CREATE:
{
...
Button1 = CreateWindowEx(0,
TEXT("BUTTON"),
TEXT("Start"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
100, 100, 100, 20,
hWnd,
(HMENU)BUTTON_START,
NULL,
NULL);
Button2 = CreateWindowEx(0,
TEXT("BUTTON"),
TEXT("Stop"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
200, 200, 100, 20,
hWnd,
(HMENU)BUTTON_STOP,
NULL,
NULL);
...
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case BUTTON_START:
longProcess(); // Starts the process
break;
case BUTTON_STOP:
stop = TRUE; // Should stop the process
break;
}
}
break;
...
}
}
Le problème est que lorsque j'appuie sur le premier bouton le processus démarre normalement, mais quand j'appuie sur le deuxième bouton pour arrêter le rien processus se produit, j'ai remarqué que l'arrêt variable est définie sur TRUE uniquement après la fin du processus. Je pensais que probablement dans un problème lié à la file d'attente de messages ...
Quelle pourrait être la meilleure solution ??? Il est correct d'appeler longProcess() là et de cette façon? (Je suis un débutant :))
Merci!
Bienvenue dans le monde de la programmation concurrente! –