Manuel Leclerc a écrit:
> A part ça, SI "un programme console a une message queue",
"
SetTimer() was not designed to be used with a console application
because it requires a message loop
"
Une appli console n'a pas de *message* loop (I/O events)
Il suffit d'en rajouter 1 avec GetMessage() et on voit que msg.message
est tjrs = 0.
Mais bien sûr qu'on peut créer ensuite des fenêtres.
Manuel Leclerc a écrit:
> A part ça, SI "un programme console a une message queue",
"
SetTimer() was not designed to be used with a console application
because it requires a message loop
"
Une appli console n'a pas de *message* loop (I/O events)
Il suffit d'en rajouter 1 avec GetMessage() et on voit que msg.message
est tjrs = 0.
Mais bien sûr qu'on peut créer ensuite des fenêtres.
Manuel Leclerc a écrit:
> A part ça, SI "un programme console a une message queue",
"
SetTimer() was not designed to be used with a console application
because it requires a message loop
"
Une appli console n'a pas de *message* loop (I/O events)
Il suffit d'en rajouter 1 avec GetMessage() et on voit que msg.message
est tjrs = 0.
Mais bien sûr qu'on peut créer ensuite des fenêtres.
> Ambassadeur Kosh wrote:ça me dérange ta boucle while(!bOk).
c'est de l'attente active.
c'est pourri et inutile.
Et le Sleep alors? Ce n 'est pas de l'attente active!
> Ambassadeur Kosh wrote:
ça me dérange ta boucle while(!bOk).
c'est de l'attente active.
c'est pourri et inutile.
Et le Sleep alors? Ce n 'est pas de l'attente active!
> Ambassadeur Kosh wrote:ça me dérange ta boucle while(!bOk).
c'est de l'attente active.
c'est pourri et inutile.
Et le Sleep alors? Ce n 'est pas de l'attente active!
pour causer riche, la prog systeme côté user, c'est
plus déclarer un besoin / spécifier des contraintes
que d'imposer un acte. sinon c'est le bordel.
et Sleep, c'est imposer un "acte".
pour causer riche, la prog systeme côté user, c'est
plus déclarer un besoin / spécifier des contraintes
que d'imposer un acte. sinon c'est le bordel.
et Sleep, c'est imposer un "acte".
pour causer riche, la prog systeme côté user, c'est
plus déclarer un besoin / spécifier des contraintes
que d'imposer un acte. sinon c'est le bordel.
et Sleep, c'est imposer un "acte".
>> pour causer riche, la prog systeme côté user, c'est
plus déclarer un besoin / spécifier des contraintes
que d'imposer un acte. sinon c'est le bordel.
et Sleep, c'est imposer un "acte".
Tu exagère un peu, je trouve :-)
Les besoins/contraintes, tu peux aussi les voir tout
simplement comme ça :
FAIRE_BIDULE
ATTENDRE_UN_PEU_GENRE_6_SECONDES_ENVIRON
RECOMMENCER
>> pour causer riche, la prog systeme côté user, c'est
plus déclarer un besoin / spécifier des contraintes
que d'imposer un acte. sinon c'est le bordel.
et Sleep, c'est imposer un "acte".
Tu exagère un peu, je trouve :-)
Les besoins/contraintes, tu peux aussi les voir tout
simplement comme ça :
FAIRE_BIDULE
ATTENDRE_UN_PEU_GENRE_6_SECONDES_ENVIRON
RECOMMENCER
>> pour causer riche, la prog systeme côté user, c'est
plus déclarer un besoin / spécifier des contraintes
que d'imposer un acte. sinon c'est le bordel.
et Sleep, c'est imposer un "acte".
Tu exagère un peu, je trouve :-)
Les besoins/contraintes, tu peux aussi les voir tout
simplement comme ça :
FAIRE_BIDULE
ATTENDRE_UN_PEU_GENRE_6_SECONDES_ENVIRON
RECOMMENCER
> > pour causer riche, la prog systeme côté user,
> > c'est plus déclarer un besoin / spécifier des
> > contraintes que d'imposer un acte. sinon c'est
> > le bordel.
> >
> > et Sleep, c'est imposer un "acte".
>
> Tu exagère un peu, je trouve :-)
>
> Les besoins/contraintes, tu peux aussi les voir tout
> simplement comme ça :
>
> FAIRE_BIDULE
> ATTENDRE_UN_PEU_GENRE_6_SECONDES_ENVIRON
> RECOMMENCER
for(;;)
if(test()) action() ;
else Sleep() ;
c'est un acte.
void main()
{
planifier(MonEvent,18:37:00) ;
}
void callback MonEvent(Sender)
{
action() ;
}
c'est l'expression d'un besoin.
maintenant, pour l'exageration, bof.
j'en ai 15 au boulot autours de moi qui font comme ça. et voila,
je te met un Sleep par ci au milieu [...]
sur le coup la, c'est pas dramatique effectivement.
mais bon, la solution à Møgluglu c'est le début d'une solution
plus generale qui répond efficacement à cette vaste catégorie
de problemes. alors que le polling, ben ca daube.
voila voila...
> > pour causer riche, la prog systeme côté user,
> > c'est plus déclarer un besoin / spécifier des
> > contraintes que d'imposer un acte. sinon c'est
> > le bordel.
> >
> > et Sleep, c'est imposer un "acte".
>
> Tu exagère un peu, je trouve :-)
>
> Les besoins/contraintes, tu peux aussi les voir tout
> simplement comme ça :
>
> FAIRE_BIDULE
> ATTENDRE_UN_PEU_GENRE_6_SECONDES_ENVIRON
> RECOMMENCER
for(;;)
if(test()) action() ;
else Sleep() ;
c'est un acte.
void main()
{
planifier(MonEvent,18:37:00) ;
}
void callback MonEvent(Sender)
{
action() ;
}
c'est l'expression d'un besoin.
maintenant, pour l'exageration, bof.
j'en ai 15 au boulot autours de moi qui font comme ça. et voila,
je te met un Sleep par ci au milieu [...]
sur le coup la, c'est pas dramatique effectivement.
mais bon, la solution à Møgluglu c'est le début d'une solution
plus generale qui répond efficacement à cette vaste catégorie
de problemes. alors que le polling, ben ca daube.
voila voila...
> > pour causer riche, la prog systeme côté user,
> > c'est plus déclarer un besoin / spécifier des
> > contraintes que d'imposer un acte. sinon c'est
> > le bordel.
> >
> > et Sleep, c'est imposer un "acte".
>
> Tu exagère un peu, je trouve :-)
>
> Les besoins/contraintes, tu peux aussi les voir tout
> simplement comme ça :
>
> FAIRE_BIDULE
> ATTENDRE_UN_PEU_GENRE_6_SECONDES_ENVIRON
> RECOMMENCER
for(;;)
if(test()) action() ;
else Sleep() ;
c'est un acte.
void main()
{
planifier(MonEvent,18:37:00) ;
}
void callback MonEvent(Sender)
{
action() ;
}
c'est l'expression d'un besoin.
maintenant, pour l'exageration, bof.
j'en ai 15 au boulot autours de moi qui font comme ça. et voila,
je te met un Sleep par ci au milieu [...]
sur le coup la, c'est pas dramatique effectivement.
mais bon, la solution à Møgluglu c'est le début d'une solution
plus generale qui répond efficacement à cette vaste catégorie
de problemes. alors que le polling, ben ca daube.
voila voila...
> Quand je disais que je trouvais que tu exagérais, je
voulais juste dire qu'il ne faut pas non plus se prendre
la tête pour faire des choses simples. Tu peux toujours
prendre n'importe quel exemple et sur-spécifier, sur-généraliser.
Là, on parlait de lancer une certaine fonction environ toute
les 6 secondes (et non pas à 18:37)
et le programme ne fait rien d'autre. Aller chercher des Events, c'est
pilon pour écraser une mouche.
Mais ça marche sûrement, hein.
A part ça, la fonction "planifier", tu l'implémentes comment ?
j'en ai 15 au boulot autours de moi qui font comme ça. et voila,
je te met un Sleep par ci au milieu [...]
Je suis d'accord avec ce genre de chose. Un Sleep dans un programme
parce que "si on l'enlève, ça marche plus" est simplement le signe
que le programmeur n'a pas bien compris quelque chose. Et il arrive
souvent que tel ou tel changement dans l'environnement fait que
"ça marche plus, même avec le Sleep" :-)
M'enfin bon, les bugs, c'est pas nouveau. Faut pas non plus tout
mettre sur le dos des actes vs les besoins.
sur le coup la, c'est pas dramatique effectivement.
Voilà.
La solution à Møgluglu, je ne l'ai pas comprise. Si toi tu as
compris, tu peux m'expliquer ?
Aucune des solutions que j'ai proposées ne comportait de polling.
> Quand je disais que je trouvais que tu exagérais, je
voulais juste dire qu'il ne faut pas non plus se prendre
la tête pour faire des choses simples. Tu peux toujours
prendre n'importe quel exemple et sur-spécifier, sur-généraliser.
Là, on parlait de lancer une certaine fonction environ toute
les 6 secondes (et non pas à 18:37)
et le programme ne fait rien d'autre. Aller chercher des Events, c'est
pilon pour écraser une mouche.
Mais ça marche sûrement, hein.
A part ça, la fonction "planifier", tu l'implémentes comment ?
j'en ai 15 au boulot autours de moi qui font comme ça. et voila,
je te met un Sleep par ci au milieu [...]
Je suis d'accord avec ce genre de chose. Un Sleep dans un programme
parce que "si on l'enlève, ça marche plus" est simplement le signe
que le programmeur n'a pas bien compris quelque chose. Et il arrive
souvent que tel ou tel changement dans l'environnement fait que
"ça marche plus, même avec le Sleep" :-)
M'enfin bon, les bugs, c'est pas nouveau. Faut pas non plus tout
mettre sur le dos des actes vs les besoins.
sur le coup la, c'est pas dramatique effectivement.
Voilà.
La solution à Møgluglu, je ne l'ai pas comprise. Si toi tu as
compris, tu peux m'expliquer ?
Aucune des solutions que j'ai proposées ne comportait de polling.
> Quand je disais que je trouvais que tu exagérais, je
voulais juste dire qu'il ne faut pas non plus se prendre
la tête pour faire des choses simples. Tu peux toujours
prendre n'importe quel exemple et sur-spécifier, sur-généraliser.
Là, on parlait de lancer une certaine fonction environ toute
les 6 secondes (et non pas à 18:37)
et le programme ne fait rien d'autre. Aller chercher des Events, c'est
pilon pour écraser une mouche.
Mais ça marche sûrement, hein.
A part ça, la fonction "planifier", tu l'implémentes comment ?
j'en ai 15 au boulot autours de moi qui font comme ça. et voila,
je te met un Sleep par ci au milieu [...]
Je suis d'accord avec ce genre de chose. Un Sleep dans un programme
parce que "si on l'enlève, ça marche plus" est simplement le signe
que le programmeur n'a pas bien compris quelque chose. Et il arrive
souvent que tel ou tel changement dans l'environnement fait que
"ça marche plus, même avec le Sleep" :-)
M'enfin bon, les bugs, c'est pas nouveau. Faut pas non plus tout
mettre sur le dos des actes vs les besoins.
sur le coup la, c'est pas dramatique effectivement.
Voilà.
La solution à Møgluglu, je ne l'ai pas comprise. Si toi tu as
compris, tu peux m'expliquer ?
Aucune des solutions que j'ai proposées ne comportait de polling.
ceci dit, un programme, on lui en rajoute à faire
toutes les 10 minutes. donc finalement, ça vaux peut
être le coup de reflechir bien du premier coup.
c'est comme les variables globales ça. c'est tellement complexe
de passer un parametre et de ne pas faire de side-effect. pfff....
> et le programme ne fait rien d'autre. Aller chercher des
> Events, c'est juste un marteau pilon pour écraser une mouche.
> Mais ça marche sûrement, hein.
ben non, c'est cucul la praline et ça n'induit pas d'effet pervers.
faut arreter les gars la.
> A part ça, la fonction "planifier", tu l'implémentes comment ?
tu l'implementes pas, elle est déja implantée. ça s'appelle le systeme.
genre un Timer.
> La solution à Møgluglu, je ne l'ai pas comprise. Si toi tu as
> compris, tu peux m'expliquer ?
"Le mieux est d'utiliser un event. Tu appelles CreateEvent avec
bInitialState suf FALSE, puis tu l'attends avec WaitForSingleObject.
Et la procédure TimerProc appelle SetEvent au lieu de mettre bOK à true."
c'est un event.
ceci dit, un programme, on lui en rajoute à faire
toutes les 10 minutes. donc finalement, ça vaux peut
être le coup de reflechir bien du premier coup.
c'est comme les variables globales ça. c'est tellement complexe
de passer un parametre et de ne pas faire de side-effect. pfff....
> et le programme ne fait rien d'autre. Aller chercher des
> Events, c'est juste un marteau pilon pour écraser une mouche.
> Mais ça marche sûrement, hein.
ben non, c'est cucul la praline et ça n'induit pas d'effet pervers.
faut arreter les gars la.
> A part ça, la fonction "planifier", tu l'implémentes comment ?
tu l'implementes pas, elle est déja implantée. ça s'appelle le systeme.
genre un Timer.
> La solution à Møgluglu, je ne l'ai pas comprise. Si toi tu as
> compris, tu peux m'expliquer ?
"Le mieux est d'utiliser un event. Tu appelles CreateEvent avec
bInitialState suf FALSE, puis tu l'attends avec WaitForSingleObject.
Et la procédure TimerProc appelle SetEvent au lieu de mettre bOK à true."
c'est un event.
ceci dit, un programme, on lui en rajoute à faire
toutes les 10 minutes. donc finalement, ça vaux peut
être le coup de reflechir bien du premier coup.
c'est comme les variables globales ça. c'est tellement complexe
de passer un parametre et de ne pas faire de side-effect. pfff....
> et le programme ne fait rien d'autre. Aller chercher des
> Events, c'est juste un marteau pilon pour écraser une mouche.
> Mais ça marche sûrement, hein.
ben non, c'est cucul la praline et ça n'induit pas d'effet pervers.
faut arreter les gars la.
> A part ça, la fonction "planifier", tu l'implémentes comment ?
tu l'implementes pas, elle est déja implantée. ça s'appelle le systeme.
genre un Timer.
> La solution à Møgluglu, je ne l'ai pas comprise. Si toi tu as
> compris, tu peux m'expliquer ?
"Le mieux est d'utiliser un event. Tu appelles CreateEvent avec
bInitialState suf FALSE, puis tu l'attends avec WaitForSingleObject.
Et la procédure TimerProc appelle SetEvent au lieu de mettre bOK à true."
c'est un event.
On dirait qu'il y a un bout de code qui est en train d'attendre dans
WaitForSingleObject et un autre bout de code qui est en train de faire
SetEvent dans une TimerProc. C'est bizarre, non ?
On dirait qu'il y a un bout de code qui est en train d'attendre dans
WaitForSingleObject et un autre bout de code qui est en train de faire
SetEvent dans une TimerProc. C'est bizarre, non ?
On dirait qu'il y a un bout de code qui est en train d'attendre dans
WaitForSingleObject et un autre bout de code qui est en train de faire
SetEvent dans une TimerProc. C'est bizarre, non ?
> Mais je constate par contre que j'ai trop souvent voulu
"réfléchir" et perdu en fait du temps à mettre
en place quelque chose de trop générique pour l'usage
que j'en ai eu par la suite. Je crois d'ailleurs qu'il
existe en ce moment un engouement pour certaines méthodes
de programmation qui vise à obtenir vite une première version,
quitte à changer les choses QUAND il s'avère que c'est nécessaire.
Je vois bien d'où viennent ces méthodes : c'est une sorte de
retour de bâton, face aux usines à gaz sur-modélisées
Je viens de commencer un projet personnel où j'ai décidé que tout
un tas de variable seraient globales (sauf si je sais de manière
évidente, à l'avance, que j'aurais besoin de plusieurs instances
de la variable). Et bien, figures-toi que c'est très reposant :-)
Tu pourrais me montrer le code cucul la praline de ta fonction
"planifier" ?
Merci, je sais lire, mais je n'ai _pas_ compris, et je crois que toi
non plus en fait.
On dirait qu'il y a un bout de code qui est en train d'attendre dans
WaitForSingleObject et un autre bout de code qui est en train de faire
SetEvent dans une TimerProc. C'est bizarre, non ?
> Mais je constate par contre que j'ai trop souvent voulu
"réfléchir" et perdu en fait du temps à mettre
en place quelque chose de trop générique pour l'usage
que j'en ai eu par la suite. Je crois d'ailleurs qu'il
existe en ce moment un engouement pour certaines méthodes
de programmation qui vise à obtenir vite une première version,
quitte à changer les choses QUAND il s'avère que c'est nécessaire.
Je vois bien d'où viennent ces méthodes : c'est une sorte de
retour de bâton, face aux usines à gaz sur-modélisées
Je viens de commencer un projet personnel où j'ai décidé que tout
un tas de variable seraient globales (sauf si je sais de manière
évidente, à l'avance, que j'aurais besoin de plusieurs instances
de la variable). Et bien, figures-toi que c'est très reposant :-)
Tu pourrais me montrer le code cucul la praline de ta fonction
"planifier" ?
Merci, je sais lire, mais je n'ai _pas_ compris, et je crois que toi
non plus en fait.
On dirait qu'il y a un bout de code qui est en train d'attendre dans
WaitForSingleObject et un autre bout de code qui est en train de faire
SetEvent dans une TimerProc. C'est bizarre, non ?
> Mais je constate par contre que j'ai trop souvent voulu
"réfléchir" et perdu en fait du temps à mettre
en place quelque chose de trop générique pour l'usage
que j'en ai eu par la suite. Je crois d'ailleurs qu'il
existe en ce moment un engouement pour certaines méthodes
de programmation qui vise à obtenir vite une première version,
quitte à changer les choses QUAND il s'avère que c'est nécessaire.
Je vois bien d'où viennent ces méthodes : c'est une sorte de
retour de bâton, face aux usines à gaz sur-modélisées
Je viens de commencer un projet personnel où j'ai décidé que tout
un tas de variable seraient globales (sauf si je sais de manière
évidente, à l'avance, que j'aurais besoin de plusieurs instances
de la variable). Et bien, figures-toi que c'est très reposant :-)
Tu pourrais me montrer le code cucul la praline de ta fonction
"planifier" ?
Merci, je sais lire, mais je n'ai _pas_ compris, et je crois que toi
non plus en fait.
On dirait qu'il y a un bout de code qui est en train d'attendre dans
WaitForSingleObject et un autre bout de code qui est en train de faire
SetEvent dans une TimerProc. C'est bizarre, non ?
> > On dirait qu'il y a un bout de code qui est en train d'attendre dans
> WaitForSingleObject et un autre bout de code qui est en train de faire
> SetEvent dans une TimerProc. C'est bizarre, non ?
> > On dirait qu'il y a un bout de code qui est en train d'attendre dans
> WaitForSingleObject et un autre bout de code qui est en train de faire
> SetEvent dans une TimerProc. C'est bizarre, non ?
> > On dirait qu'il y a un bout de code qui est en train d'attendre dans
> WaitForSingleObject et un autre bout de code qui est en train de faire
> SetEvent dans une TimerProc. C'est bizarre, non ?