begin process at 2012 05 30 09:22:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

SetWaitableTimer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SetWaitableTimer

vendredi 5 septembre 2003 à 09:40:59 | SetWaitableTimer

jm2

Salut!

Voici un morceau de prg qui me pose pb.:

hTempo=CreateWaitableTimer(NULL,true,NULL);

affich.Format("erreur creer: %d",GetLastError());

SetDlgItemText(IDC_msg,affich);

LDuree.QuadPart=-100000;

if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
{
affich.Format("erreur set: %d",GetLastError());
SetDlgItemText(IDC_msg2,affich);
}

CreateWaitableTimer ne renvoie pas d'erreur.
SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.

D'où vient le pb. ?

merci d'avance.

vendredi 5 septembre 2003 à 09:54:36 | Re : SetWaitableTimer

BruNews

Administrateur CodeS-SourceS
Mets adresse en 2 eme param de SetWaitableTimer(...).
&LDuree
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Salut!
>
> Voici un morceau de prg qui me pose pb.:
>
> hTempo=CreateWaitableTimer(NULL,true,NULL);
>
> affich.Format("erreur creer: %d",GetLastError());
>
> SetDlgItemText(IDC_msg,affich);
>
> LDuree.QuadPart=-100000;
>
> if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> {
> affich.Format("erreur set: %d",GetLastError());
> SetDlgItemText(IDC_msg2,affich);
> }
>
> CreateWaitableTimer ne renvoie pas d'erreur.
> SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
>
> D'où vient le pb. ?
>
> merci d'avance.
>
>
vendredi 5 septembre 2003 à 12:46:35 | Re : SetWaitableTimer

jm2


jm2

Poblème quand je met &LDuree:
error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'

alors est-ce que ça vient de ma déclaration:
_LARGE_INTEGER LDuree;

ou d'autre chose?
rem:je n'avais pas d'erreur de compilation avant.

-------------------------------
Réponse au message :
-------------------------------

> Mets adresse en 2 eme param de SetWaitableTimer(...).
> &LDuree
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Salut!
> >
> > Voici un morceau de prg qui me pose pb.:
> >
> > hTempo=CreateWaitableTimer(NULL,true,NULL);
> >
> > affich.Format("erreur creer: %d",GetLastError());
> >
> > SetDlgItemText(IDC_msg,affich);
> >
> > LDuree.QuadPart=-100000;
> >
> > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > {
> > affich.Format("erreur set: %d",GetLastError());
> > SetDlgItemText(IDC_msg2,affich);
> > }
> >
> > CreateWaitableTimer ne renvoie pas d'erreur.
> > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> >
> > D'où vient le pb. ?
> >
> > merci d'avance.
> >
> >
>
vendredi 5 septembre 2003 à 12:55:38 | Re : SetWaitableTimer

BruNews

Administrateur CodeS-SourceS
C'est bien ce que j'avais dit de mettre et c'est ce que tu as mis ?

if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) &LDuree,0,NULL,NULL,false))

BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> jm2
>
> Poblème quand je met &LDuree:
> error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'
>
> alors est-ce que ça vient de ma déclaration:
> _LARGE_INTEGER LDuree;
>
> ou d'autre chose?
> rem:je n'avais pas d'erreur de compilation avant.
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Mets adresse en 2 eme param de SetWaitableTimer(...).
> > &LDuree
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Salut!
> > >
> > > Voici un morceau de prg qui me pose pb.:
> > >
> > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > >
> > > affich.Format("erreur creer: %d",GetLastError());
> > >
> > > SetDlgItemText(IDC_msg,affich);
> > >
> > > LDuree.QuadPart=-100000;
> > >
> > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > > {
> > > affich.Format("erreur set: %d",GetLastError());
> > > SetDlgItemText(IDC_msg2,affich);
> > > }
> > >
> > > CreateWaitableTimer ne renvoie pas d'erreur.
> > > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> > >
> > > D'où vient le pb. ?
> > >
> > > merci d'avance.
> > >
> > >
> >
>
vendredi 5 septembre 2003 à 14:22:52 | Re : SetWaitableTimer

jm2


jm2

effectivement, j'avais enlevé (const union _LARGE_INTEGER *) et mis que &LDuree.

merci pour ton aide BruNews.

j'ai vu que certains cherchaient à faire un Sleep() sans utiliser la fonction Sleep(). Alors je sais pas si c'est correcte mais j'ai un équivalent ci-dessous:
initialisation:
_LARGE_INTEGER LDuree;
HANDLE hTempo;

LDuree.QuadPart=-20000000; //durée 2S

créer le Handle:
hTempo=CreateWaitableTimer(NULL,true,NULL);

le lancer:
SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *)&LDuree.QuadPart,0,NULL,NULL,false)

tester:
if(WaitForSingleObject(hTempo,0)==WAIT_OBJECT_0)
...

sachant que cette dernière instruction peut attendre ou non suivant le second paramètre.

Voilà.
encore une fois merci Brunews.

-------------------------------
Réponse au message :
-------------------------------

> C'est bien ce que j'avais dit de mettre et c'est ce que tu as mis ?
>
> if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) &LDuree,0,NULL,NULL,false))
>
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > jm2
> >
> > Poblème quand je met &LDuree:
> > error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'
> >
> > alors est-ce que ça vient de ma déclaration:
> > _LARGE_INTEGER LDuree;
> >
> > ou d'autre chose?
> > rem:je n'avais pas d'erreur de compilation avant.
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Mets adresse en 2 eme param de SetWaitableTimer(...).
> > > &LDuree
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Salut!
> > > >
> > > > Voici un morceau de prg qui me pose pb.:
> > > >
> > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > >
> > > > affich.Format("erreur creer: %d",GetLastError());
> > > >
> > > > SetDlgItemText(IDC_msg,affich);
> > > >
> > > > LDuree.QuadPart=-100000;
> > > >
> > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > > > {
> > > > affich.Format("erreur set: %d",GetLastError());
> > > > SetDlgItemText(IDC_msg2,affich);
> > > > }
> > > >
> > > > CreateWaitableTimer ne renvoie pas d'erreur.
> > > > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> > > >
> > > > D'où vient le pb. ?
> > > >
> > > > merci d'avance.
> > > >
> > > >
> > >
> >
>
vendredi 5 septembre 2003 à 14:36:13 | Re : SetWaitableTimer

BruNews

Administrateur CodeS-SourceS
Sleep() est bloquant donc pas equivalent, l'interet de creer un substitut a Sleep() est de ne pas bloquer le prog si on a une fenetre affichee. Pour bien faire placer le code d'attente dans un thread qui envoie un message WM_USER+x a la fenetre pour dire quand attente est finie.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> jm2
>
> effectivement, j'avais enlevé (const union _LARGE_INTEGER *) et mis que &LDuree.
>
> merci pour ton aide BruNews.
>
> j'ai vu que certains cherchaient à faire un Sleep() sans utiliser la fonction Sleep(). Alors je sais pas si c'est correcte mais j'ai un équivalent ci-dessous:
> initialisation:
> _LARGE_INTEGER LDuree;
> HANDLE hTempo;
>
> LDuree.QuadPart=-20000000; //durée 2S
>
> créer le Handle:
> hTempo=CreateWaitableTimer(NULL,true,NULL);
>
> le lancer:
> SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *)&LDuree.QuadPart,0,NULL,NULL,false)
>
> tester:
> if(WaitForSingleObject(hTempo,0)==WAIT_OBJECT_0)
> ...
>
> sachant que cette dernière instruction peut attendre ou non suivant le second paramètre.
>
> Voilà.
> encore une fois merci Brunews.
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > C'est bien ce que j'avais dit de mettre et c'est ce que tu as mis ?
> >
> > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) &LDuree,0,NULL,NULL,false))
> >
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > > jm2
> > >
> > > Poblème quand je met &LDuree:
> > > error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'
> > >
> > > alors est-ce que ça vient de ma déclaration:
> > > _LARGE_INTEGER LDuree;
> > >
> > > ou d'autre chose?
> > > rem:je n'avais pas d'erreur de compilation avant.
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Mets adresse en 2 eme param de SetWaitableTimer(...).
> > > > &LDuree
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Salut!
> > > > >
> > > > > Voici un morceau de prg qui me pose pb.:
> > > > >
> > > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > > >
> > > > > affich.Format("erreur creer: %d",GetLastError());
> > > > >
> > > > > SetDlgItemText(IDC_msg,affich);
> > > > >
> > > > > LDuree.QuadPart=-100000;
> > > > >
> > > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > > > > {
> > > > > affich.Format("erreur set: %d",GetLastError());
> > > > > SetDlgItemText(IDC_msg2,affich);
> > > > > }
> > > > >
> > > > > CreateWaitableTimer ne renvoie pas d'erreur.
> > > > > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> > > > >
> > > > > D'où vient le pb. ?
> > > > >
> > > > > merci d'avance.
> > > > >
> > > > >
> > > >
> > >
> >
>
jeudi 18 septembre 2003 à 15:46:50 | Re : SetWaitableTimer

jm2


jm2

Autre question:
On ne peut pas envoyer de message à une dll sans fenêtre?

Dans mon cas c'est une DLL sous VC++ appelée par un prog. VB, donc le message WM_USER+x n'est pas utilisable ici?

Comment fair alors pour avoir un Sleep() qui consomme le moins de temps processeur dans une dll sans fenêtre (sans pompe à message)?


-------------------------------
Réponse au message :
-------------------------------

> Sleep() est bloquant donc pas equivalent, l'interet de creer un substitut a Sleep() est de ne pas bloquer le prog si on a une fenetre affichee. Pour bien faire placer le code d'attente dans un thread qui envoie un message WM_USER+x a la fenetre pour dire quand attente est finie.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > jm2
> >
> > effectivement, j'avais enlevé (const union _LARGE_INTEGER *) et mis que &LDuree.
> >
> > merci pour ton aide BruNews.
> >
> > j'ai vu que certains cherchaient à faire un Sleep() sans utiliser la fonction Sleep(). Alors je sais pas si c'est correcte mais j'ai un équivalent ci-dessous:
> > initialisation:
> > _LARGE_INTEGER LDuree;
> > HANDLE hTempo;
> >
> > LDuree.QuadPart=-20000000; //durée 2S
> >
> > créer le Handle:
> > hTempo=CreateWaitableTimer(NULL,true,NULL);
> >
> > le lancer:
> > SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *)&LDuree.QuadPart,0,NULL,NULL,false)
> >
> > tester:
> > if(WaitForSingleObject(hTempo,0)==WAIT_OBJECT_0)
> > ...
> >
> > sachant que cette dernière instruction peut attendre ou non suivant le second paramètre.
> >
> > Voilà.
> > encore une fois merci Brunews.
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > C'est bien ce que j'avais dit de mettre et c'est ce que tu as mis ?
> > >
> > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) &LDuree,0,NULL,NULL,false))
> > >
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > > jm2
> > > >
> > > > Poblème quand je met &LDuree:
> > > > error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'
> > > >
> > > > alors est-ce que ça vient de ma déclaration:
> > > > _LARGE_INTEGER LDuree;
> > > >
> > > > ou d'autre chose?
> > > > rem:je n'avais pas d'erreur de compilation avant.
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Mets adresse en 2 eme param de SetWaitableTimer(...).
> > > > > &LDuree
> > > > > BruNews, ciao...
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Salut!
> > > > > >
> > > > > > Voici un morceau de prg qui me pose pb.:
> > > > > >
> > > > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > > > >
> > > > > > affich.Format("erreur creer: %d",GetLastError());
> > > > > >
> > > > > > SetDlgItemText(IDC_msg,affich);
> > > > > >
> > > > > > LDuree.QuadPart=-100000;
> > > > > >
> > > > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > > > > > {
> > > > > > affich.Format("erreur set: %d",GetLastError());
> > > > > > SetDlgItemText(IDC_msg2,affich);
> > > > > > }
> > > > > >
> > > > > > CreateWaitableTimer ne renvoie pas d'erreur.
> > > > > > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> > > > > >
> > > > > > D'où vient le pb. ?
> > > > > >
> > > > > > merci d'avance.
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
jeudi 18 septembre 2003 à 16:04:38 | Re : SetWaitableTimer

BruNews

Administrateur CodeS-SourceS
Certes un prog ne communique pas avec une dll par messages, il le fait par les fonctions exportees depuis la dll.
Autre methode simple sont les Event avec ResetEvent etc...
Tu peux faire un Sleep ainsi:
HANDLE hevent = CreateEvent(...);
WaitForSingleObject(hevent, 1000); // 1 seconde
CloseHandle(hevent);
aucune boucle, si tu mets cela dans un thread tu auras une attente non blocante pour vb, a toi de signaler si besoin a vb que attente finie.

BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> jm2
>
> Autre question:
> On ne peut pas envoyer de message à une dll sans fenêtre?
>
> Dans mon cas c'est une DLL sous VC++ appelée par un prog. VB, donc le message WM_USER+x n'est pas utilisable ici?
>
> Comment fair alors pour avoir un Sleep() qui consomme le moins de temps processeur dans une dll sans fenêtre (sans pompe à message)?
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Sleep() est bloquant donc pas equivalent, l'interet de creer un substitut a Sleep() est de ne pas bloquer le prog si on a une fenetre affichee. Pour bien faire placer le code d'attente dans un thread qui envoie un message WM_USER+x a la fenetre pour dire quand attente est finie.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > > jm2
> > >
> > > effectivement, j'avais enlevé (const union _LARGE_INTEGER *) et mis que &LDuree.
> > >
> > > merci pour ton aide BruNews.
> > >
> > > j'ai vu que certains cherchaient à faire un Sleep() sans utiliser la fonction Sleep(). Alors je sais pas si c'est correcte mais j'ai un équivalent ci-dessous:
> > > initialisation:
> > > _LARGE_INTEGER LDuree;
> > > HANDLE hTempo;
> > >
> > > LDuree.QuadPart=-20000000; //durée 2S
> > >
> > > créer le Handle:
> > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > >
> > > le lancer:
> > > SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *)&LDuree.QuadPart,0,NULL,NULL,false)
> > >
> > > tester:
> > > if(WaitForSingleObject(hTempo,0)==WAIT_OBJECT_0)
> > > ...
> > >
> > > sachant que cette dernière instruction peut attendre ou non suivant le second paramètre.
> > >
> > > Voilà.
> > > encore une fois merci Brunews.
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > C'est bien ce que j'avais dit de mettre et c'est ce que tu as mis ?
> > > >
> > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) &LDuree,0,NULL,NULL,false))
> > > >
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > >
> > > > > jm2
> > > > >
> > > > > Poblème quand je met &LDuree:
> > > > > error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'
> > > > >
> > > > > alors est-ce que ça vient de ma déclaration:
> > > > > _LARGE_INTEGER LDuree;
> > > > >
> > > > > ou d'autre chose?
> > > > > rem:je n'avais pas d'erreur de compilation avant.
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Mets adresse en 2 eme param de SetWaitableTimer(...).
> > > > > > &LDuree
> > > > > > BruNews, ciao...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Salut!
> > > > > > >
> > > > > > > Voici un morceau de prg qui me pose pb.:
> > > > > > >
> > > > > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > > > > >
> > > > > > > affich.Format("erreur creer: %d",GetLastError());
> > > > > > >
> > > > > > > SetDlgItemText(IDC_msg,affich);
> > > > > > >
> > > > > > > LDuree.QuadPart=-100000;
> > > > > > >
> > > > > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > > > > > > {
> > > > > > > affich.Format("erreur set: %d",GetLastError());
> > > > > > > SetDlgItemText(IDC_msg2,affich);
> > > > > > > }
> > > > > > >
> > > > > > > CreateWaitableTimer ne renvoie pas d'erreur.
> > > > > > > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> > > > > > >
> > > > > > > D'où vient le pb. ?
> > > > > > >
> > > > > > > merci d'avance.
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
jeudi 18 septembre 2003 à 17:42:42 | Re : SetWaitableTimer

jm2


jm2
>... a toi de signaler si besoin a vb que attente finie.
tu veux dire par retour de fonction ?

merci pour ta réponse.

-------------------------------
Réponse au message :
-------------------------------

> Certes un prog ne communique pas avec une dll par messages, il le fait par les fonctions exportees depuis la dll.
> Autre methode simple sont les Event avec ResetEvent etc...
> Tu peux faire un Sleep ainsi:
> HANDLE hevent = CreateEvent(...);
> WaitForSingleObject(hevent, 1000); // 1 seconde
> CloseHandle(hevent);
> aucune boucle, si tu mets cela dans un thread tu auras une attente non blocante pour vb, a toi de signaler si besoin a vb que attente finie.
>
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > jm2
> >
> > Autre question:
> > On ne peut pas envoyer de message à une dll sans fenêtre?
> >
> > Dans mon cas c'est une DLL sous VC++ appelée par un prog. VB, donc le message WM_USER+x n'est pas utilisable ici?
> >
> > Comment fair alors pour avoir un Sleep() qui consomme le moins de temps processeur dans une dll sans fenêtre (sans pompe à message)?
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Sleep() est bloquant donc pas equivalent, l'interet de creer un substitut a Sleep() est de ne pas bloquer le prog si on a une fenetre affichee. Pour bien faire placer le code d'attente dans un thread qui envoie un message WM_USER+x a la fenetre pour dire quand attente est finie.
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > > jm2
> > > >
> > > > effectivement, j'avais enlevé (const union _LARGE_INTEGER *) et mis que &LDuree.
> > > >
> > > > merci pour ton aide BruNews.
> > > >
> > > > j'ai vu que certains cherchaient à faire un Sleep() sans utiliser la fonction Sleep(). Alors je sais pas si c'est correcte mais j'ai un équivalent ci-dessous:
> > > > initialisation:
> > > > _LARGE_INTEGER LDuree;
> > > > HANDLE hTempo;
> > > >
> > > > LDuree.QuadPart=-20000000; //durée 2S
> > > >
> > > > créer le Handle:
> > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > >
> > > > le lancer:
> > > > SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *)&LDuree.QuadPart,0,NULL,NULL,false)
> > > >
> > > > tester:
> > > > if(WaitForSingleObject(hTempo,0)==WAIT_OBJECT_0)
> > > > ...
> > > >
> > > > sachant que cette dernière instruction peut attendre ou non suivant le second paramètre.
> > > >
> > > > Voilà.
> > > > encore une fois merci Brunews.
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > C'est bien ce que j'avais dit de mettre et c'est ce que tu as mis ?
> > > > >
> > > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) &LDuree,0,NULL,NULL,false))
> > > > >
> > > > > BruNews, ciao...
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > >
> > > > > > jm2
> > > > > >
> > > > > > Poblème quand je met &LDuree:
> > > > > > error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'
> > > > > >
> > > > > > alors est-ce que ça vient de ma déclaration:
> > > > > > _LARGE_INTEGER LDuree;
> > > > > >
> > > > > > ou d'autre chose?
> > > > > > rem:je n'avais pas d'erreur de compilation avant.
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Mets adresse en 2 eme param de SetWaitableTimer(...).
> > > > > > > &LDuree
> > > > > > > BruNews, ciao...
> > > > > > >
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > Salut!
> > > > > > > >
> > > > > > > > Voici un morceau de prg qui me pose pb.:
> > > > > > > >
> > > > > > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > > > > > >
> > > > > > > > affich.Format("erreur creer: %d",GetLastError());
> > > > > > > >
> > > > > > > > SetDlgItemText(IDC_msg,affich);
> > > > > > > >
> > > > > > > > LDuree.QuadPart=-100000;
> > > > > > > >
> > > > > > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > > > > > > > {
> > > > > > > > affich.Format("erreur set: %d",GetLastError());
> > > > > > > > SetDlgItemText(IDC_msg2,affich);
> > > > > > > > }
> > > > > > > >
> > > > > > > > CreateWaitableTimer ne renvoie pas d'erreur.
> > > > > > > > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> > > > > > > >
> > > > > > > > D'où vient le pb. ?
> > > > > > > >
> > > > > > > > merci d'avance.
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
jeudi 18 septembre 2003 à 17:46:24 | Re : SetWaitableTimer

BruNews

Administrateur CodeS-SourceS
non, si tu mets dans un thread pour du non bloquant, ta fonction retourne illico. Par contre le thread PostMessage(...) a une fenetre vb pour lui indiquer fin d'attente.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

>
> jm2
> >... a toi de signaler si besoin a vb que attente finie.
> tu veux dire par retour de fonction ?
>
> merci pour ta réponse.
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Certes un prog ne communique pas avec une dll par messages, il le fait par les fonctions exportees depuis la dll.
> > Autre methode simple sont les Event avec ResetEvent etc...
> > Tu peux faire un Sleep ainsi:
> > HANDLE hevent = CreateEvent(...);
> > WaitForSingleObject(hevent, 1000); // 1 seconde
> > CloseHandle(hevent);
> > aucune boucle, si tu mets cela dans un thread tu auras une attente non blocante pour vb, a toi de signaler si besoin a vb que attente finie.
> >
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > > jm2
> > >
> > > Autre question:
> > > On ne peut pas envoyer de message à une dll sans fenêtre?
> > >
> > > Dans mon cas c'est une DLL sous VC++ appelée par un prog. VB, donc le message WM_USER+x n'est pas utilisable ici?
> > >
> > > Comment fair alors pour avoir un Sleep() qui consomme le moins de temps processeur dans une dll sans fenêtre (sans pompe à message)?
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Sleep() est bloquant donc pas equivalent, l'interet de creer un substitut a Sleep() est de ne pas bloquer le prog si on a une fenetre affichee. Pour bien faire placer le code d'attente dans un thread qui envoie un message WM_USER+x a la fenetre pour dire quand attente est finie.
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > >
> > > > > jm2
> > > > >
> > > > > effectivement, j'avais enlevé (const union _LARGE_INTEGER *) et mis que &LDuree.
> > > > >
> > > > > merci pour ton aide BruNews.
> > > > >
> > > > > j'ai vu que certains cherchaient à faire un Sleep() sans utiliser la fonction Sleep(). Alors je sais pas si c'est correcte mais j'ai un équivalent ci-dessous:
> > > > > initialisation:
> > > > > _LARGE_INTEGER LDuree;
> > > > > HANDLE hTempo;
> > > > >
> > > > > LDuree.QuadPart=-20000000; //durée 2S
> > > > >
> > > > > créer le Handle:
> > > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > > >
> > > > > le lancer:
> > > > > SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *)&LDuree.QuadPart,0,NULL,NULL,false)
> > > > >
> > > > > tester:
> > > > > if(WaitForSingleObject(hTempo,0)==WAIT_OBJECT_0)
> > > > > ...
> > > > >
> > > > > sachant que cette dernière instruction peut attendre ou non suivant le second paramètre.
> > > > >
> > > > > Voilà.
> > > > > encore une fois merci Brunews.
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > C'est bien ce que j'avais dit de mettre et c'est ce que tu as mis ?
> > > > > >
> > > > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) &LDuree,0,NULL,NULL,false))
> > > > > >
> > > > > > BruNews, ciao...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > >
> > > > > > > jm2
> > > > > > >
> > > > > > > Poblème quand je met &LDuree:
> > > > > > > error C2664: 'SetWaitableTimer' : cannot convert parameter 2 from '__int64 *' to 'const union _LARGE_INTEGER *'
> > > > > > >
> > > > > > > alors est-ce que ça vient de ma déclaration:
> > > > > > > _LARGE_INTEGER LDuree;
> > > > > > >
> > > > > > > ou d'autre chose?
> > > > > > > rem:je n'avais pas d'erreur de compilation avant.
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > Mets adresse en 2 eme param de SetWaitableTimer(...).
> > > > > > > > &LDuree
> > > > > > > > BruNews, ciao...
> > > > > > > >
> > > > > > > >
> > > > > > > > -------------------------------
> > > > > > > > Réponse au message :
> > > > > > > > -------------------------------
> > > > > > > >
> > > > > > > > > Salut!
> > > > > > > > >
> > > > > > > > > Voici un morceau de prg qui me pose pb.:
> > > > > > > > >
> > > > > > > > > hTempo=CreateWaitableTimer(NULL,true,NULL);
> > > > > > > > >
> > > > > > > > > affich.Format("erreur creer: %d",GetLastError());
> > > > > > > > >
> > > > > > > > > SetDlgItemText(IDC_msg,affich);
> > > > > > > > >
> > > > > > > > > LDuree.QuadPart=-100000;
> > > > > > > > >
> > > > > > > > > if(!SetWaitableTimer(hTempo,(const union _LARGE_INTEGER *) LDuree.QuadPart,0,NULL,NULL,false))
> > > > > > > > > {
> > > > > > > > > affich.Format("erreur set: %d",GetLastError());
> > > > > > > > > SetDlgItemText(IDC_msg2,affich);
> > > > > > > > > }
> > > > > > > > >
> > > > > > > > > CreateWaitableTimer ne renvoie pas d'erreur.
> > > > > > > > > SetWaitableTimer me renvoie l'erreur 998: 998 Invalid access to memory location. ERROR_NOACCESS.
> > > > > > > > >
> > > > > > > > > D'où vient le pb. ?
> > > > > > > > >
> > > > > > > > > merci d'avance.
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

1 2

Cette discussion est classée dans : pb, erreur, affich, setwaitabletimer, htempo


Répondre à ce message

Sujets en rapport avec ce message

pb avec conio je cherche l'erreur [ par kin ] Calculatrice (postfixé) : pb a l'execution [ par filipuce ] Bonjourvoila g fé une petite calculatrice (+,-,*,/ avec parentheses)sous linux pas de probleme, compilation et execution.mais en retouranant sous wind pb tm redefinition [ par Kyb ] Bonjour, je cherche ¨¤ creer un server web sous winCE et voici l'erreur  que j'obtient   en compilant sous Visual Studio:Erreur 1 error C2011: 'tm' : pb socket sous c++builder5 [ par devilralf ] voici mon code de la socket client sous builder5 : Client1->Address = "192.168.0.2" ; Client1->Port = 5500 ; Client1->Open();le probleme c que si l PB avec msg d erreur [ par Rei91 ] Bonjour, je n'arrive pas a compiler un prg suite a ce message d erreur :[linker error] undefined reference to glutlnit.JE dois avoir une 20 aine de li Pb FreeLibrary [ par kidpigeyre ] Mon pb est le suivant lors de mon utilisation de :FreeLibrary(modules[n].handle)mon logiciel plante en accusant sauvagement kernell32.dll (erreur typi Erreur send() [ par DJeS ] avec winsock2 sous devc++, j'obtiens une erreur lors de l'envoi d'un msg avec ma socket en mode connecté stream.en affichant le SOCKET_ERROR avec cout AIDEZ MOI!!! [ par W@$h! ] Voila mon pb :Dans 1 de mes prog, je créé un fichier temporaire qui recopie caractére par caractere un fichier :...FILE *fichier;FILE *temp;char Carac pb de passage en mode promiscuous [ par pistoleros ] bien le bonjour a tous ! bon ben je sais que ca doit etre une question assez conne mais comment on fait pour passer en mode promiscuous... le but du j PB d hook clavier et variable de control [ par alanBZH29 ] Salut a tous j debute ss VC6.0++ et jai un petit pb, jai utilisé un hook clavier pr recupere les touches appuyé sur une boite d dialoge ca ca marche y


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales