While (1) ?!?

cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004 - 9 avril 2004 à 19:55
cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004 - 9 avril 2004 à 22:51
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

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
9 avril 2004 à 20:04
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
0
cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004
9 avril 2004 à 20:12
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 ...
0
PunkDude424 Messages postés 117 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 24 avril 2006
9 avril 2004 à 20:16
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
0
cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004
9 avril 2004 à 20:39
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 !!!!
0

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

Posez votre question
PunkDude424 Messages postés 117 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 24 avril 2006
9 avril 2004 à 20:43
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
9 avril 2004 à 20:44
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]=--
0
cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004
9 avril 2004 à 20:55
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;

}

0
cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004
9 avril 2004 à 20:59
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 :)
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
9 avril 2004 à 21:20
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..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
9 avril 2004 à 21:21
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..."
0
PunkDude424 Messages postés 117 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 24 avril 2006
9 avril 2004 à 21:24
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
9 avril 2004 à 22:36
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]=--
0
cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004
9 avril 2004 à 22:51
nan, je veu just savoir cb yen a et kan yena + kau scan précédent je veu kune boite de dialog s'ouvre.
0
Rejoignez-nous