While (1) ?!?

Signaler
Messages postés
50
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004
-
Messages postés
50
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004
-
Salut !

J'ai une boucle while(1) à mettre dans mon prog pour qu'il tourne en permanence, je dois la metttre dans le WinMain autour de mon DialogBox ou dans le AppDlgProc autour de tout mon bordel :) ??

des chercheurs on en trouve mais des trouveurs, ça ...... :)

Attention !! ne me mouillez po ! il parait ke je deviendrait méchant ...

13 réponses

Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
non pas dans le Winmain, car la fonction DlgBox n'aura pas fini d'etre executer, et si donc ta DlgProc, non plus car Win32 ne fonction pas comme cela, essaye peut etre les timers
Messages postés
50
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004

Pourtant quand j'utilisai un simple "main" avec des instructions en printf, avec une boucle qhile(1) ca s'exécutai très bien . tu es sûr kon ne peu pa insérerle while(1) dans le DlgProc?????

Attention !! ne me mouillez po ! il parait ke je deviendrait méchant ...
Messages postés
117
Date d'inscription
mardi 3 février 2004
Statut
Membre
Dernière intervention
24 avril 2006

On programme windows n'a pas du tout la meme structure q'un programme console, tu n'a pas besoin de faire une boucle, et tu ne doit pas, pour que celui-ci n'arrete pas, le winmain doit appler ta dialog principale qui elle appellera c'est enfants, quand la dialog principale se fermera, le programme va se fermer
Messages postés
50
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004

Il est bien là le pb : je n'ai qu'une fenêtre qui s'ouvre dans des conditions bien particulières et à n'importe quel moment !!! je sui donc obligé de mettre une boucle while quelque part !!!!
Messages postés
117
Date d'inscription
mardi 3 février 2004
Statut
Membre
Dernière intervention
24 avril 2006

quel sont les condition??? par exemple quand lusager bouge la souris une dialog doit safficher ??? Alors tu dois récupérer le message dans DefWindowProc, quand un evenement se preduit le defwindowproc le recoit, et ta juste a le traiter la dedans
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
AVec un while(1) tu vas bouffer toute les ressources du PC...
Mets ton code ici ca sera plus facile pour nous de trouver une solution optimale a ton programme!

--=[DeAtH_-_CrAsH]=--
Messages postés
50
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004

Je m'en sui rendu compte ... :)
mon PC n'a pas aimé :))))))

ok le principe est simple:
scanner un dossier et s'il y a des nouveaux *.hd qui sont arrivés, m'alerter en ouvrant une boite de dialogue et jouer de la musique . ca vou parrai surement tout con mai ca a ses difficultés pour moi qui sui débutant :), et ca a ses utilités !

Merci à tous de vos conseils !!!

#include <fstream>
#include 
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <mmsystem.h>
#pragma comment (lib,"winmm.lib") //librairie => playsound
#include "resource.h"

using namespace std;
int new_nb=0,old_nb=0;

LRESULT CALLBACK MainProc(HWND Dlg,UINT mssg,WPARAM wParam,LPARAM lParam);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

while(1){

DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)MainProc);

/*	HWND hDlg;
hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)MainProc);
ShowWindow(hDlg,SW_SHOW);
MSG msg;
while(GetMessage(&msg,hDlg,0,0)==TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
*/			}

return 0;
}

LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int Select;
HANDLE hd;
WIN32_FIND_DATA w32hd;

int nb=0;	//nombre de fichiers *.hd
char leshd[256] = "*.hd";	//tableau stockant les fichiers *.hd
//prendre le 1er fichier 
hd = FindFirstFile ( leshd, &w32hd );
//si il y a un autre fichier recommencer l'operation
while (FindNextFile( hd, &w32hd)) nb++;
//si il y a des fichier avec l'extension .hd
if (hd!=INVALID_HANDLE_VALUE) new_nb = nb;

//affichage du message
switch(message)
{
case WM_INITDIALOG:
//si la nouvelle valeur de nb est différente de l'ancienne valeur (+ de .hd)
if (new_nb >> old_nb){
SetClassLong(Dlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
}
else EndDialog(Dlg,0);
return 1;
case WM_COMMAND:
Select=LOWORD(wParam);
switch(Select)
{
case IDOK:
EndDialog(Dlg,0);
PostQuitMessage(0);
return TRUE;
}
break;
default:
return FALSE;
}
Sleep(10000);
//mise à jour de nb
old_nb = new_nb;

}

Messages postés
50
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004

Précision: Je voudrai scanner le dossier toutes les minutes environ

et seulement de 22h à 0h ==> si ca peu aider à trouver une solution je vou en serai trè reconnaissant :)
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
remplace ce code:

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{

while(1){

DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)MainProc);

/* HWND hDlg;
hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)MainProc);
ShowWindow(hDlg,SW_SHOW);
MSG msg;
while(GetMessage(&msg,hDlg,0,0)==TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
*/ 
}


par celui-ci

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), 0, (DLGPROC)MainProc);
return 0;
}


et la il ne bouffera pas tout, ensuite tu envles 'SetClassLong(Dlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));' de ta boucle if...
et pour finir une instruction 'case' doit toujours se terminer par un break:

WM_INITDIALOG:
instructions...
break;

Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
ensuite je t'ai deja renvoyer vers un tutorial pour la prog avec les API Win, avant de te lancer dans le codage a partir des exemples, il faut que tu lises les cours, sinon il est normal que tu ne comprendra jamais ce qui se passe !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
117
Date d'inscription
mardi 3 février 2004
Statut
Membre
Dernière intervention
24 avril 2006

Pour ton problème ta juste a faire sa,

#include <stdio.h>
#include
#include <direct.h>

struct _finddata_t c_file
long hFile;

if(!_chdir(tmppath))
{
while(true)
{
//Find first file. if( (hFile _findfirst( "*.hd", &c_file )) -1L )
printf("pas de fichier toruver");
else
////fais se que tu veux
}

tu peux faire _findnext( hFile, &c_file ) pour trouver les autre fichier
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Est ce que tu dois savoir qu'elle est le nom du nouveau fichier .hd qui arrives ou tu en a pas besoin ?

--=[DeAtH_-_CrAsH]=--
Messages postés
50
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004

nan, je veu just savoir cb yen a et kan yena + kau scan précédent je veu kune boite de dialog s'ouvre.