Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

STOP THREAD [DEMANDE FORUM]


Information sur la source

Catégorie :API Niveau : Débutant Date de création : 23/02/2004 Date de mise à jour : 25/10/2005 15:11:54 Vu / téléchargé: 6 685 / 1 207

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


Description

Se trouve aussi ici: http://www.dev.winsysdev.com/

Voici une source qui créer un thread. Ce thread compte jusqu'a 100 puis se termine. Mais on peut cliquer sur un bouton "Stop" pour arreter prématurément le traitement...
 

Conclusion

Amusez-vous bien :-)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Release
    • StopThread.exeTélécharger ce fichier [Réservé aux membres club]23 040 octets
  • resource.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier637 octets
  • StopThread.apsTélécharger ce fichier [Réservé aux membres club]33 300 octets
  • StopThread.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 703 octets
  • StopThread.ncbTélécharger ce fichier [Réservé aux membres club]44 032 octets
  • StopThread.rcTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 647 octets
  • StopThread.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier920 octets
  • StopThread.suoTélécharger ce fichier [Réservé aux membres club]8 192 octets
  • StopThread.vcprojTélécharger ce fichier [Réservé aux membres club]3 099 octets

Télécharger le zip

Historique

25 octobre 2005 15:11:54 :
Se trouve aussi ici: http://www.dev.winsysdev.com/

Commentaires et avis

signaler à un administrateur
Commentaire de LordBob le 24/02/2004 18:30:56

tu aurrais peut etre pu un peu plus expliquer ta source pour que les debutant, comprenne un peu mieux !!! car moi si je ne savait pas comment créer un thread, bah j'aurrais galéré pour bien comprendre ta source !!!

signaler à un administrateur
Commentaire de Arnotic le 24/02/2004 19:57:45 administrateur CS

Il me semblait que la source etait suffisamente petite pour arriver à s'y retourver.

Je prends note.

signaler à un administrateur
Commentaire de vecchio56 le 13/05/2004 12:58:28 administrateur CS

Le problème avec ton truc c'est que ce n'est pas satisfaisant pour un thread qui devrait aller vite, puisque l'appel à WaitForSingleObject prend pas mal de temps. Pourquoi ne pas utiliser un simple booléen qui dit s'il faut arrêter?

signaler à un administrateur
Commentaire de AlexMAN le 18/07/2004 13:18:30

Un booleen est TOTALEMENT deconseillé ds l'utilisation de thread : utilisation du CPU de minimum 99% avec cette methode...

signaler à un administrateur
Commentaire de vecchio56 le 18/07/2004 13:22:19 administrateur CS

Bah non, le while(b)  sera plus rapide que le while( WaitForSingleObject( d_eventStop, D_TIME_OUT_TEST ) == WAIT_TIMEOUT ); qui va beaucoup ralentir le thread

signaler à un administrateur
Commentaire de AlexMAN le 18/07/2004 13:28:52

en terme de rapidité je pense pareil ke toi, mais cela n'empeche pas ke le cpu sera ocupé a 99% par ton thread, et c vraiment un truc a eviter..

signaler à un administrateur
Commentaire de vecchio56 le 18/07/2004 13:35:00 administrateur CS

Non j'ai fait un programme qui faisait de gros calculs, que je devais arrêter quand je voulais, eh bien la solution avec un booléen était bien meilleure (d'autant meilleure qu'on vérifie souvent s'il faut arrêter le thread - il est évident que regarder si un booleen est tru ou false va plus vite qu'appeler une fonction qui va regarder en plus des HANDLE).
Tu n'a qu'a essayer sur cet exemple, le cpu n'est pas du tout occupé, de ce coté la ca ne change structement rien.
D'ailleurs je ne voie pas pourquoi ca utiliserait plus de cpu??

signaler à un administrateur
Commentaire de vecchio56 le 18/07/2004 13:35:36 administrateur CS

Voila: tu n'a qu'a essayer par toi même

#include <windows.h>
#include <process.h>
#include <stdlib.h>

#include "resource.h"

#define D_TIME_OUT_TEST 1L

HWND hstatus;

BOOL b;
DWORD Thread_TestID;

DWORD WINAPI Thread_Test( LPVOID lpParam )
{
int inc=0;
char *szbuff;

if (!(szbuff = (char *)malloc(4)))
return 1;

do
{
if (inc == 99)
b = FALSE;
SetWindowText(hstatus, itoa(++inc, szbuff, 10));
Sleep(100L);
} while(b);

free(szbuff);
MessageBox(NULL, "Arret du thread.", "Stop", 0x40);

return 0;
}

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg)
{
case WM_INITDIALOG:
SetClassLongPtr(hdlg, GCL_HICON, (LONG)(LONG_PTR)LoadIcon(0, IDI_APPLICATION));
hstatus = GetDlgItem(hdlg, IDC_STATUS);
return 1;
case WM_COMMAND:
switch(wParam)
{
case IDC_START:
b = TRUE;
CreateThread(NULL, 0, &Thread_Test, NULL, NULL, &Thread_TestID);
return 0;
case IDC_STOP:
b = FALSE;
return 0;
case IDCANCEL:
EndDialog(hdlg, 0);
}
}
return 0;
}

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PSTR, int)
{
DialogBoxParam(hinst, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0);
return 0;
}

signaler à un administrateur
Commentaire de AlexMAN le 18/07/2004 13:43:16

vecchio56 > ya un sleep(100) ds ta boucle, c normal ke ca pompe pas le cpu comme un malade...enleve le, teste sur un grand nombre, et regarde l'activité de ton cpu...

signaler à un administrateur
Commentaire de vecchio56 le 18/07/2004 13:47:50 administrateur CS

Bah oui mais quand on a un processus qui doit utiliser beaucoup de mémoire, il faut bien le faire. Essaie de calculer 100000! avec maple et tu verra que ta cpu est à 100%

signaler à un administrateur
Commentaire de vecchio56 le 18/07/2004 13:50:11 administrateur CS

Enfin mets D_TIME_OUT_TEST à 0 et il va aussi te bouffer toute ta cpu

signaler à un administrateur
Commentaire de Arnotic le 19/07/2004 08:24:03 administrateur CS

En fait si le Thread ne vient pas prendre 100% du CPU c'est juste grace au Sleep(). le mieux mettre en Sleep(10L); quand très très peu de traitement dans le thread.

Après on peut justement ne pas mettre de Sleep() pour une aplication en plein ecran pendant qu'elle traite des données pour allez plus vite.

signaler à un administrateur
Commentaire de AlexMAN le 19/07/2004 12:11:31

Arnotic > personnelement, j'ai enormement de pb avec les threads, jme suis tapé Petzold mais j'ai pas plus compris (serai je un cas desespéré ?!), donc jvoulais te demander ds la limite de ton temps disponible (?!), si tu pouvais pas nous faire une ptite applic Multi-Thread avec un peu plus de threads kici (avec event, mutex, section critique...)...Voila c seulement si tu as du temps, sinon c po grav, jV aller me taper Richter...merci

++

ALhexman

signaler à un administrateur
Commentaire de Arnotic le 19/07/2004 12:17:13 administrateur CS

Je verra pour faire un exemple d'appli comme ca alors. Sinon qu'est-ce que tu ne comprends pas exactement ?

signaler à un administrateur
Commentaire de AlexMAN le 19/07/2004 12:24:13

ben en fait, je ne comprends pas ou placer WaitForSingleObject dans la threadProc. Comment gerer plusieurs threads est vraiment un mystere ! Kan faire (pour les event) un SetEvent, ou un ResetEvent pour permettre aux autres threads de s'executer, enfin je gere pas du tt kan le nbre de threads (sans compter le thread principal) depasse 1.

signaler à un administrateur
Commentaire de NitRic le 07/09/2004 21:54:44


DWORD dwRet = WaitForSingleObject( hnd, INFINITE );

switch ( dwRet ) {

case WAIT_TIMEOUT:
...
break;

case WAIT_FAILED:
...
break;

case WAIT_OBJECT_0:
...
break;

case _WAIT_ABANDONNED:
/* mutex only */
break;

}

Pas besoin de boucle, WaitForSingleObject()/WaitForMultipleObjects() sont parfait pour ce type de `boulot` ...

un while(var); est `strictement` déconseillé. Peu importe le type de projet. Il y à les sections critiques, mutex, event, semaphore, ... pour la synchronisation ...


Petit tutorial parfait à propos du multithreadnig(pour les interessés);
http://bob.developpez.com/tutapiwin/article_46.php




~(.:: NitRic ::.)~

signaler à un administrateur
Commentaire de ncoder le 03/09/2005 10:54:04

Non la source est assez courte pour la comprendre sans avoir besoin de beaucoup de commentaires !

Merci pour ta source, elle est très bien faite (pour commencer!) ;)

signaler à un administrateur
Commentaire de Inekman le 11/11/2005 08:55:11

Je m'aide de ton code pour implémenter un arrêt d'un thread dans un de mes programmes fait en Delphi, cependant je ne parviens pas à définir la contante D_TIME_OUT_TEST à 1L, quelle est cette valeur ?

Merci.

signaler à un administrateur
Commentaire de BruNews le 11/11/2005 09:16:35 administrateur CS

1L ou 1 c'est idem.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.