Probleme avec settimer et tread

logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007 - 30 oct. 2006 à 20:08
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007 - 30 oct. 2006 à 23:37
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
30 oct. 2006 à 22:45
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++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
30 oct. 2006 à 23:02
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++ (@++)<!--
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 oct. 2006 à 23:07
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++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
30 oct. 2006 à 23:27
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++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007
30 oct. 2006 à 23:37
Merci a tous les deux  :)
0
Rejoignez-nous