begin process at 2012 05 28 23:36:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Creation de timer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Creation de timer

mercredi 22 mars 2006 à 22:50:09 | Creation de timer

julienbornet

Bonjour j'ai besoin de creer un timer qui verifie l'etat d'un bouton (s'il a ete cliquer ou non) pendant qu'une autre action s'effectue.
Pourr etre plus clair, j'ai deux boutons, l'un sert au demarage d'une boucle while et l'autre est senser servir a stoper la boucle. Le probleme c'est que qd la boucle while s'effectue, je ne peut plus appuyer sur l'autre bouton. Il faut donc que j'effectue un test dans ma boucle while a interval regulier pour verifier que le bouton stop n'est pas ete clique.
Quelqu'un pourait il m'indiquer comment creer un tel timer

D'avance merci.

PS: je sais que la creation d'un mulitithread serait mieux mais aussi plus compliquer cependant si vous pouvez me dire exactement comment creer un thread qui demarre au clic du premier bouton et qui s'arret au clic du second je ne suis pas contre.
mercredi 22 mars 2006 à 23:02:19 | Re : Creation de timer

SAKingdom

Membre Club
Tu peut pas faire un bouton pour une while. Dans ce cas il faut créé un nouveau thread avec CreateThread.
exemple

unsigned _thread1 (LPVOID param)
{
    int i= NULL;

    while(1)
    {
       i++;
    }
}

met en variable global
HANDLE thread1

puis dans ta procédure de fenetre

case WM_COMMAND
    if((HWND)lParam == ActivWhile)
       thread1 = CreateThread(0, 0xFF, (LPTHREAD_START_ROUTINE)_thread1, 0, 0, 0);

    if((HWND)lParam == StopWhile)
       CloseHandle(thread1);

j'ai pas essailler alors jpeut pas te dire si c'est sûre

___________________________________________
Les plus grands esprits trouvent toujours une solution

jeudi 23 mars 2006 à 01:20:02 | Re : Creation de timer

BruNews

Administrateur CodeS-SourceS
CloseHandle n'arrete pas un thread, ce serait:
TerminateThread() : méthode sauvage, cas d'extrème urgence.
ExitThread() : un peu plus propre mais encore bof bof.
Indiquer au thread de sortir proprement, exemple en positionnant un indicateur que le thread lira régulièrement sinon en utilisant les méthodes de synchro du système (lire Richter, le sujet est très vaste).

ciao...
[ Lien ]
BruNews, MVP VC++
jeudi 23 mars 2006 à 02:19:43 | Re : Creation de timer

SAKingdom

Membre Club
Ceci pour quitter "proprement" pourrait-il faire l'affaire alors?

unsigned _thread1 (LPVOID param)
{
    int i= NULL;

    while(1)
    {
       i++;

       if(ThreadExit == true)
       {
          TreadExit = false;
          break;
       }
    }

    return 0;
}

met en variable global
HANDLE thread1;
bool ThreadExit = false;

puis dans ta procédure de fenetre

case WM_COMMAND
    if((HWND)lParam == ActivWhile)
       thread1 = CreateThread(0, 0xFF, (LPTHREAD_START_ROUTINE)_thread1, 0, 0, 0);

    if((HWND)lParam == StopWhile)
       ThreadExit =  true;

___________________________________________
Les plus grands esprits trouvent toujours une solution

jeudi 23 mars 2006 à 21:24:49 | Re : Creation de timer

BruNews

Administrateur CodeS-SourceS
Exemple parmi d'autres ici:
TROUVER UNE CHAINE DE CARACTÈRES(2) (WIN32)
http://www.cppfrance.com/code.aspx?id=19169

Penser à fermer le handle: CloseHandle(thread1);

ciao...
[ Lien ]
BruNews, MVP VC++
vendredi 24 mars 2006 à 20:32:27 | Re : Creation de timer

julienbornet

Ok Brunews je suis en traint d'essayer de ramanier la source que tu m'a filer pour faire quelque chose de propre (ou au moins essayer).
Par contre je ne sait pas a koi sert le type

LPDWD pdwd

il est present dans la Le thread et sert a pperement a afire le lien avec les autres fonctions.

vendredi 24 mars 2006 à 20:33:11 | Re : Creation de timer

julienbornet

A moins qu'il ne serve a allouer la memoire suffisant au derouleemnt du thread
vendredi 24 mars 2006 à 20:44:20 | Re : Creation de timer

BruNews

Administrateur CodeS-SourceS
Le param du thread ? Il est défini par l'API, on passe ce qu'on veut via un pointeur.

ciao...
[ Lien ]
BruNews, MVP VC++
vendredi 24 mars 2006 à 21:24:25 | Re : Creation de timer

julienbornet

Oui merci je en effet je n'avait pas vu.
Bon voila j'ai terminer mon programme test qui me permet de verifier que j'ai bien compris  ou non .

Je la poste donc si tu peux y jeter un coup d'oiel se serait sympa. Je penses partir sur cette base pour mon Thread pour mon prog principal. Ce thread se contente d'ecrire des nombre dams un fichier et il s'arret quand on pres le bouton stop (ce qui est en fin de compte prof de ce que je veux faire).

#include "Display.h"

/*-------------------------------------------------------------------------------------------*/

#define ONEMEGA 0x100000

#define WM_ENDTHRD (WM_USER+1)

HANDLE hthrd = 0;

HWND hbtstop;

DWORD bstop;

FILE * fic;

typedef struct tagDWD {

WIN32_FIND_DATA wfd;

char *pmem;

}DWD, *LPDWD;

/*-------------------------------------------------------------------------------------------*/

void __stdcall WriteInFile(LPDWD pdwd)

{

int i = 0;

deb:

if(bstop) goto userstop;

i++;

fprintf(fic,"%i\n",i);

goto deb;

userstop:

fclose(fic);

}

DWORD WINAPI ThreadProc(LPVOID pparam)

{

LPDWD pdwd; // 1 SEULE ALLOCATION, structure et pdwd->pmem

pdwd = (LPDWD) HeapAlloc(GetProcessHeap(), 0, sizeof(DWD) + ONEMEGA);

if(!pdwd) goto thrdExit;

pdwd->pmem = (char*) (((BYTE*)pdwd) + sizeof(DWD));

EnableWindow(hbtstop, 1); // Rends le boutton stop actif

/*Allpeler la fonction du thread a cet endroit*/

WriteInFile(pdwd);

HeapFree(GetProcessHeap(), 0, pdwd);

thrdExit:

PostMessage((HWND) pparam, WM_ENDTHRD, 0, (LPARAM) pdwd);

return 0;

}

LRESULT CALLBACK MainProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)

{

int Select;

switch (Msg)

{

/*Initialisation of the windows */

case WM_INITDIALOG:

hbtstop = GetDlgItem(hDlg, IDC_BUTTON_StopThread);

return TRUE;

/* Programation of the management of the windows*/

case WM_COMMAND:

Select = LOWORD(wParam);

switch (Select)

{

case IDOK:

sortie = 0;

EndDialog(hDlg, LOWORD(wParam));

return TRUE;

case IDCANCEL:

sortie = 0;

EndDialog(hDlg, LOWORD(wParam));

return TRUE;

case IDC_BUTTON_StartThread:

if(hthrd) return 0;

fic = fopen("testthread.txt","w+");

bstop = 0;

hthrd = CreateThread(0, 0, ThreadProc, (LPVOID) hDlg, 0, 0);

return TRUE;

case IDC_BUTTON_StopThread:

bstop = 1;

return TRUE;

}

default: return FALSE;

}

}

vendredi 24 mars 2006 à 21:26:16 | Re : Creation de timer

julienbornet

Voila surtout n'hesite pas a me dire tout ce qui ne va pas. Une fois ces erreurs corriger penses tu (en tant qu'adiministarteur) qu'il serait interessant que je poset mon code.

D'avance merci

1 2

Cette discussion est classée dans : bouton, boucle, timer, creer, creation


Répondre à ce message

Sujets en rapport avec ce message

creation de bouton sans dialog ni de menu ? [ par AirFoxOne ] Salut,Une tite question... ya moyen de mettre des bouton, text entry etc.. sur n'importe quelle fenetre ? genre je cree un rectangle et je colle mon b C++ builder : Interrompre une boucle lors de l'appui sur un bouton [ par Minou1981 ] Bonjour à tous,Je suis en train de programmer avec c++ builder. Mon probleme est le suivant: je ne sais pas comment faire pour interrompre une boucle problème de boucle infinie (win32 sans MFC) [ par ksh182 ] Salut,voilà, je code en C++ win32 via les ressources et j'utilises VS 2003 .NET----------------- case WM_COMMAND: { switch(wParam) { case IDC Timer !! comprend rien [ par malfroc ] Bonjour,je regarde les Timer sous visual C++. Je bosse en MFC, et voudrais appliqué un timer dès que l'on clique sur un bouton , et l'arreter lorqu'i sortir d'une boucle while infinie avec un bouton [ par bertrandbasch ] Bonjour,En fait je voudrai pouvoir lancer une boucle while à l'aide d'un bouton 1 qui pourrait être stoppé à l'aide d'un bouton stop.Il me faut cette creation d'un tableau de taille augmentant a chaque iteration d'une boucle [ par rom12 ] Salut,J'ai besoin de creer un tableau de taille variable... dt la taille n'est pas connue d'avance (d'ou le pb avec malloc).En fait, j'ai une boucle q Creation d'une classe [ par enrageur ] J'ai fais un petit programme en C++ et j'aimerais creer une classe avec a l'interieur le petit programme. Mais je ne sais pas comment creer une clase. bouton stop [ par rlope ] BonjourJ'ai un petit problème avec un bouton STOP que je voudrais créer. (Visual C++ boite de dialogue)Explication :Avec un bouton de ma boite de dial boucle do while et timer [ par gogeta2003 ] Salut, je doit récupérer une valeur que je lis sur une carte E/S, et j'attend dans une boucle infini pour passer au cycle suivant tant que je n'ai pas Creer un bouton avec l'API Windows [ par banane_rose ] code : ICI C'est sensé faire apparaitre une fenêtre avec un gros bouton "Quitter" au milieu . Mais rien ne marche , même pas l'affichage de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales