cs_elbok
Messages postés12Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention28 avril 2008
-
4 mars 2008 à 00:58
cs_elbok
Messages postés12Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention28 avril 2008
-
4 mars 2008 à 22:44
bon soir
j'ai besoin de répéter périodiquement (tte les secondes) le traiement d'une procédure.
je travail avec visuel C++ et je développe en C une aplliction sous dos.
aider moi S.V.P et merci d'avance
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 mars 2008 à 02:06
Sûrement pas avec une console. Faudrait une pompe à messages. Cependant, elle bloquera le thread.
La solution est d'utiliser plusieurs threads. Ceci par exemple:
#include <windows.h>
#include <stdio.h>
BOOL bEnd = FALSE;
DWORD __stdcall threadroutine (void *param)
{
// Tant que bEnd est à FALSE, on continue
while(!bEnd) {
printf("100\n"); // On affiche "100" à toute les 100 milisecondes
Sleep(100);
}
return 0;
}
int main ()
{
// On créer et démarre le nouveau thread
// Sa routine est threadroutine
HANDLE hThread = CreateThread(0, 0, threadroutine, 0, 0, 0);
int i;
// Pendant que le second thread roule, on fait nos petite affaires dans ce thread
for(i = 0; i < 10; i++) {
Sleep(1000);
printf("Bonjour\n");
}
// Une fois terminé, on met bEnd à TRUE pour indiquer que l'on veut terminer le second thread
bEnd = TRUE;
// On attend que la routine quitte
WaitForSingleObject(hThread, INFINITE);
// Puis on ferme le thread
CloseHandle(hThread);
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 4 mars 2008 à 21:05
Salut,
Même avec une console on peut utiliser le timer en ajoutant une boucle des messages.
On utilisera donc normalement SetTimer() et KillTimer(). Le message WM_TIMER sera intercepté au sein de la boucle des messages. J'ai utilisé cette technique dans mes deux derniers codes sources:
DÉTOURNER LA FRAPPE CLAVIER APPLICATION WIN32 SANS FENÊTRE ET AVEC BOUCLE DES MESSAGES
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 mars 2008 à 21:59
Tu n'as pas lu mon message complètement:
"
Sûrement pas avec une console. Faudrait une pompe à messages. Cependant, elle bloquera le thread."
La seule solution pour ne pas bloquer le thread principal est de faire plusieurs threads. Dans ce cas, aucun besoin de timer puisqu'une boucle + Sleep fera le travail (pour ce qu'il demande en tout cas).
cs_elbok
Messages postés12Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention28 avril 2008 4 mars 2008 à 22:44
j'ai essayé d'utiliser votre code parce que c'est ce que je cherche vraiment et je l'ai modifié comme suis:
DWORD __stdcall threadroutine (AP *v,cl *cli)
{
//BOOL bEnd = FALSE;
// Tant que bEnd est à FALSE, on continue
while(!bEnd) {
//printf("************ 100 ms passees ************\n"); // On affiche "100" à toute les 100 milisecondes
verifier_connexion(cli,&v);
printf("\n");
Sleep(100);
}
return 0;
}
mais il me génère tjr l'erreur suivante;
warning C4047: 'function' : 'unsigned long (__stdcall *)(void *)' differs in levels of indirection from 'unsigned long '