Probleme avec settimer et tread

Signaler
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007
-
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007
-
Bonsoir , pourriez-vous me donner un exemple detaillé de l'utilisation de la commande
settimer sur les timers avec et sans fenetre et pourriez-vous aussi me donner la façon de
faire un tread ansi que de comment les créers pour partager le cpu de mon programme  et quel headers (librairie) utiliser et comment s'en servire pour les timers , j'utilise dev c++ 

Je vous remerci d'avance

5 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Pour SetTimer, normalement, on utilise la procédure de la fenêtre. Sinon, le dernier paramètre permet de pointer vers une fonction qui sera executé après le temps écoulé.
Exemple sans fenêtre:

SetTimer(0, 0, 100, (TIMERPROC)fonction); // 100 millisecondes

Avec une fenêtre, il faut le hWnd de la procédure que tu entre dans le premier paramètre

SetTimer(hWnd, 0, 100, 0); // 100 millisecondes

Puis tu intercepte le message dans la procédure avec WM_TIMER. Si tu as plus qu'un timer, wParam peut te renseigner sur l'id du timer:

case WM_TIMER:
if(wParam = = 0) // Timer id 0
{
    ....
}
break;

MSDN pour plus d'info.

On utilise CreateThread pour créé des threads. C'est simple à utiliser. Exemple simple:

HANDLE hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)fonction, 0, 0, 0);

Ne pas oublier de fermer le HANDLE avec CloseHandle:

CloseHandle(hThread);

=/library/en-us/dllproc/base/createthread.asp MSDN encore une fois pour plus d'info

Pour les headers, suffit d'inclure windows.h. La lib devrait être incluse par défaut.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
J'ai oublié de dire. fonction en paramètre de CreateThread est tout simplement une fonction déclaré comme suit:

DWORD fonction (void *param)
{
    ....
}

......

CreateThread(......, (LPTHREAD_START_ROUTINE)fonction, ......);

C'est elle qui sera executé sur un autre thread.

C++ (@++)<!--
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Ne pas mettre de cast devant les noms de fonction, ça permet d'avoir une alerte compilo au cas où les fonctions sont mal prototypées;

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
C'est l'habitude.

Dans ce cas, déclare la fonction pour le thread comme ça:

DWORD __stdcall fonction (void *param)

et celle pour le timer comme ça:

void __stdcall fonction (HWND hWnd, UINT message, UINT_PTR idEvent, DWORD time)

et oublie les cast dans CreateThread et SetTimer.

J'espère que j'ai pas fais erreur.
C++ (@++)<!--
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007

Merci a tous les deux  :)