> Parce que :
1) Laisser un thread avec ce niveau de priorité pendant longtemps (ie
plus de quelques ms) a la facheuse tendance à déstabiliser Windows
(certains de ces services indsipensables n'ayant plus de temps
processeur pour travailler).
2) On peut toujours être préhempté par une interruption.
Il me semble que la solution serait d'écrire un driver pour le port
série qui, lorsqu'il recoit l'interruption de données disponible,
lance immédiatement l'acquisition sur la carte dédiée (éventuellement
en levant une autre INT gérée par le driver de la carte
d'acquisition). Par contre, je ne connais pas assez le DDK pour donner
des conseils de mise en oeuvre de ce genre de choses.
> Parce que :
1) Laisser un thread avec ce niveau de priorité pendant longtemps (ie
plus de quelques ms) a la facheuse tendance à déstabiliser Windows
(certains de ces services indsipensables n'ayant plus de temps
processeur pour travailler).
2) On peut toujours être préhempté par une interruption.
Il me semble que la solution serait d'écrire un driver pour le port
série qui, lorsqu'il recoit l'interruption de données disponible,
lance immédiatement l'acquisition sur la carte dédiée (éventuellement
en levant une autre INT gérée par le driver de la carte
d'acquisition). Par contre, je ne connais pas assez le DDK pour donner
des conseils de mise en oeuvre de ce genre de choses.
> Parce que :
1) Laisser un thread avec ce niveau de priorité pendant longtemps (ie
plus de quelques ms) a la facheuse tendance à déstabiliser Windows
(certains de ces services indsipensables n'ayant plus de temps
processeur pour travailler).
2) On peut toujours être préhempté par une interruption.
Il me semble que la solution serait d'écrire un driver pour le port
série qui, lorsqu'il recoit l'interruption de données disponible,
lance immédiatement l'acquisition sur la carte dédiée (éventuellement
en levant une autre INT gérée par le driver de la carte
d'acquisition). Par contre, je ne connais pas assez le DDK pour donner
des conseils de mise en oeuvre de ce genre de choses.
> 2) On peut toujours être préhempté par une interruption.
c'est bien ce qu'il me semblait. mais, peut on postuler que le temps
passé en mode noyau est toujours infiniment plus court que le quantum
de temps alloué à un thread ? si oui, ben c'est pas si mal que
ça finalement.
> 2) On peut toujours être préhempté par une interruption.
c'est bien ce qu'il me semblait. mais, peut on postuler que le temps
passé en mode noyau est toujours infiniment plus court que le quantum
de temps alloué à un thread ? si oui, ben c'est pas si mal que
ça finalement.
> 2) On peut toujours être préhempté par une interruption.
c'est bien ce qu'il me semblait. mais, peut on postuler que le temps
passé en mode noyau est toujours infiniment plus court que le quantum
de temps alloué à un thread ? si oui, ben c'est pas si mal que
ça finalement.
"Arnaud Debaene" wrote in message
news:"Vincent Burel" wrote in message
news:<bmjstd$uqj$..."Ambassadeur Kosh" wrote in message
news:bmjr93$moa$et en mettant ca dans un thread TIME_CRITICAL...
pas bête.
mais n'est ce pas qu'un paliatif ?
Ben non. Pourquoi !?
Parce que :
1) Laisser un thread avec ce niveau de priorité pendant longtemps
(ie plus de quelques ms) a la facheuse tendance à déstabiliser
Windows (certains de ces services indsipensables n'ayant plus de
temps
processeur pour travailler).
Wow, faut pas diaboliser le TIME_CRITICAL ! au pire vous aurez une
comportment en saccade si le Thread TIME_CRITICAL fait des traitement
long de 30ms par exemple toutes les 50 ms. Mais bon faut savoir
qu'est ce que vous voulez prioriser dans votre application. Mais une
instabilité ! non. sauf si le thread ne "respire" pas. c'est sur, si
vous lancez un Thread TIME CRITICAL pour copier 50 Go de données,
alors là votre Windows pourra paraitre un peu bloqué jusqu'à la fin
de l'opération ou presque... Mais dans l'exemple qui nous concerne,
le thread en question ne fera pratiquement rien puisqu'il passera son
temps à attendre un event du port série via la fonction read... donc
vous le sentirez même pas qu'il est TIME_CRITICAL..
2) On peut toujours être préhempté par une interruption.
Il me semble qaue la solution serait d'écrire un driver pour le port
série qui, lorsqu'il recoit l'interruption de données disponible,
lance immédiatement l'acquisition sur la carte dédiée (éventuellement
en levant une autre INT gérée par le driver de la carte
d'acquisition). Par contre, je ne connais pas assez le DDK pour
donner des conseils de mise en oeuvre de ce genre de choses.
qu'est ce que ca change , que vous écriviez le driver ou pas , c'est
pas vous qui allez dire à Windows que le port série doit être plus
prioritaire que le controler IDE et la carte réseaux.
Et puis les
drivers communiquent à l'application par event, et c'est windows qui
s'occupe des event.
Même dans l'audio, les faiseurs de driver
n'arrivent pas à garantir l'arrivée des event à temps. parce que le
mécanisme Windows ne le permet tout simplement pas.
"Arnaud Debaene" <adebaene@club-internet.fr> wrote in message
news:16a4a8c7.0310160349.da6d29b@posting.google.com...
"Vincent Burel" <vincent.burel@wanadoo.fr> wrote in message
news:<bmjstd$uqj$1@news-reader1.wanadoo.fr>...
"Ambassadeur Kosh" <yanapa@nospamnocry.fr> wrote in message
news:bmjr93$moa$1@news-reader1.wanadoo.fr...
et en mettant ca dans un thread TIME_CRITICAL...
pas bête.
mais n'est ce pas qu'un paliatif ?
Ben non. Pourquoi !?
Parce que :
1) Laisser un thread avec ce niveau de priorité pendant longtemps
(ie plus de quelques ms) a la facheuse tendance à déstabiliser
Windows (certains de ces services indsipensables n'ayant plus de
temps
processeur pour travailler).
Wow, faut pas diaboliser le TIME_CRITICAL ! au pire vous aurez une
comportment en saccade si le Thread TIME_CRITICAL fait des traitement
long de 30ms par exemple toutes les 50 ms. Mais bon faut savoir
qu'est ce que vous voulez prioriser dans votre application. Mais une
instabilité ! non. sauf si le thread ne "respire" pas. c'est sur, si
vous lancez un Thread TIME CRITICAL pour copier 50 Go de données,
alors là votre Windows pourra paraitre un peu bloqué jusqu'à la fin
de l'opération ou presque... Mais dans l'exemple qui nous concerne,
le thread en question ne fera pratiquement rien puisqu'il passera son
temps à attendre un event du port série via la fonction read... donc
vous le sentirez même pas qu'il est TIME_CRITICAL..
2) On peut toujours être préhempté par une interruption.
Il me semble qaue la solution serait d'écrire un driver pour le port
série qui, lorsqu'il recoit l'interruption de données disponible,
lance immédiatement l'acquisition sur la carte dédiée (éventuellement
en levant une autre INT gérée par le driver de la carte
d'acquisition). Par contre, je ne connais pas assez le DDK pour
donner des conseils de mise en oeuvre de ce genre de choses.
qu'est ce que ca change , que vous écriviez le driver ou pas , c'est
pas vous qui allez dire à Windows que le port série doit être plus
prioritaire que le controler IDE et la carte réseaux.
Et puis les
drivers communiquent à l'application par event, et c'est windows qui
s'occupe des event.
Même dans l'audio, les faiseurs de driver
n'arrivent pas à garantir l'arrivée des event à temps. parce que le
mécanisme Windows ne le permet tout simplement pas.
"Arnaud Debaene" wrote in message
news:"Vincent Burel" wrote in message
news:<bmjstd$uqj$..."Ambassadeur Kosh" wrote in message
news:bmjr93$moa$et en mettant ca dans un thread TIME_CRITICAL...
pas bête.
mais n'est ce pas qu'un paliatif ?
Ben non. Pourquoi !?
Parce que :
1) Laisser un thread avec ce niveau de priorité pendant longtemps
(ie plus de quelques ms) a la facheuse tendance à déstabiliser
Windows (certains de ces services indsipensables n'ayant plus de
temps
processeur pour travailler).
Wow, faut pas diaboliser le TIME_CRITICAL ! au pire vous aurez une
comportment en saccade si le Thread TIME_CRITICAL fait des traitement
long de 30ms par exemple toutes les 50 ms. Mais bon faut savoir
qu'est ce que vous voulez prioriser dans votre application. Mais une
instabilité ! non. sauf si le thread ne "respire" pas. c'est sur, si
vous lancez un Thread TIME CRITICAL pour copier 50 Go de données,
alors là votre Windows pourra paraitre un peu bloqué jusqu'à la fin
de l'opération ou presque... Mais dans l'exemple qui nous concerne,
le thread en question ne fera pratiquement rien puisqu'il passera son
temps à attendre un event du port série via la fonction read... donc
vous le sentirez même pas qu'il est TIME_CRITICAL..
2) On peut toujours être préhempté par une interruption.
Il me semble qaue la solution serait d'écrire un driver pour le port
série qui, lorsqu'il recoit l'interruption de données disponible,
lance immédiatement l'acquisition sur la carte dédiée (éventuellement
en levant une autre INT gérée par le driver de la carte
d'acquisition). Par contre, je ne connais pas assez le DDK pour
donner des conseils de mise en oeuvre de ce genre de choses.
qu'est ce que ca change , que vous écriviez le driver ou pas , c'est
pas vous qui allez dire à Windows que le port série doit être plus
prioritaire que le controler IDE et la carte réseaux.
Et puis les
drivers communiquent à l'application par event, et c'est windows qui
s'occupe des event.
Même dans l'audio, les faiseurs de driver
n'arrivent pas à garantir l'arrivée des event à temps. parce que le
mécanisme Windows ne le permet tout simplement pas.
Extrait de "Inside Windows 2000" :
"Be aware that many important Windows 2000 kernel-mode system threads run
the realtime priority range, so if your process spends excessive time
running in this range, it might be blocking critical system functions in
memory manager, cache manager, local and network file systems, and even
other device drivers. It won't block hardware interrupts because they have
higher priority than any thread, but it might block system threads from
ing".
> Et puis les
> drivers communiquent à l'application par event, et c'est windows qui
> s'occupe des event.
Là n'est pas le problème : si le driver est capable de faire l'acquisition
dans les délais requis
et de mettre les résultats dans un buffer,
le temps
de réaction de l'application qui fait le traitement derrière n'est plus
fondamental (du moment qu'il est inférieur à l'intervalle entre deux
mesures).
> n'arrivent pas à garantir l'arrivée des event à temps. parce que le
> mécanisme Windows ne le permet tout simplement pas.
Si tu as des références sur le sujet, ca pourrait intéresser Ambassadeur
Kosh (et d'autres).
Extrait de "Inside Windows 2000" :
"Be aware that many important Windows 2000 kernel-mode system threads run
the realtime priority range, so if your process spends excessive time
running in this range, it might be blocking critical system functions in
memory manager, cache manager, local and network file systems, and even
other device drivers. It won't block hardware interrupts because they have
higher priority than any thread, but it might block system threads from
ing".
> Et puis les
> drivers communiquent à l'application par event, et c'est windows qui
> s'occupe des event.
Là n'est pas le problème : si le driver est capable de faire l'acquisition
dans les délais requis
et de mettre les résultats dans un buffer,
le temps
de réaction de l'application qui fait le traitement derrière n'est plus
fondamental (du moment qu'il est inférieur à l'intervalle entre deux
mesures).
> n'arrivent pas à garantir l'arrivée des event à temps. parce que le
> mécanisme Windows ne le permet tout simplement pas.
Si tu as des références sur le sujet, ca pourrait intéresser Ambassadeur
Kosh (et d'autres).
Extrait de "Inside Windows 2000" :
"Be aware that many important Windows 2000 kernel-mode system threads run
the realtime priority range, so if your process spends excessive time
running in this range, it might be blocking critical system functions in
memory manager, cache manager, local and network file systems, and even
other device drivers. It won't block hardware interrupts because they have
higher priority than any thread, but it might block system threads from
ing".
> Et puis les
> drivers communiquent à l'application par event, et c'est windows qui
> s'occupe des event.
Là n'est pas le problème : si le driver est capable de faire l'acquisition
dans les délais requis
et de mettre les résultats dans un buffer,
le temps
de réaction de l'application qui fait le traitement derrière n'est plus
fondamental (du moment qu'il est inférieur à l'intervalle entre deux
mesures).
> n'arrivent pas à garantir l'arrivée des event à temps. parce que le
> mécanisme Windows ne le permet tout simplement pas.
Si tu as des références sur le sujet, ca pourrait intéresser Ambassadeur
Kosh (et d'autres).
> >le temps
> de réaction de l'application qui fait le traitement derrière n'est plus
> fondamental (du moment qu'il est inférieur à l'intervalle entre deux
> mesures).
Très intelligent ca. c'est du style : " la température n'est pas un
fondamental (du moment qu'elle ne descent pas en dessous de 25 degrées)"
:-))
> >le temps
> de réaction de l'application qui fait le traitement derrière n'est plus
> fondamental (du moment qu'il est inférieur à l'intervalle entre deux
> mesures).
Très intelligent ca. c'est du style : " la température n'est pas un
fondamental (du moment qu'elle ne descent pas en dessous de 25 degrées)"
:-))
> >le temps
> de réaction de l'application qui fait le traitement derrière n'est plus
> fondamental (du moment qu'il est inférieur à l'intervalle entre deux
> mesures).
Très intelligent ca. c'est du style : " la température n'est pas un
fondamental (du moment qu'elle ne descent pas en dessous de 25 degrées)"
:-))
> >le temps
> > de réaction de l'application qui fait le traitement derrière n'est
> > fondamental (du moment qu'il est inférieur à l'intervalle entre deux
> > mesures).
>
> Très intelligent ca. c'est du style : " la température n'est pas un
problème
> fondamental (du moment qu'elle ne descent pas en dessous de 25 degrées)"
> :-))
non, sur le coup la, il a bien vu.
par chance, je n'ai pas de traitement réactif à faire.
une fois l'objet mesuré, il continue de vivre sa vie.
le resultat de l'optimisation est utile à un controleur qui fera du boulot
bien plus "loin" et ou le systeme fera attendre l'objet jusqu'à ce que le
résultat arrive.
> >le temps
> > de réaction de l'application qui fait le traitement derrière n'est
> > fondamental (du moment qu'il est inférieur à l'intervalle entre deux
> > mesures).
>
> Très intelligent ca. c'est du style : " la température n'est pas un
problème
> fondamental (du moment qu'elle ne descent pas en dessous de 25 degrées)"
> :-))
non, sur le coup la, il a bien vu.
par chance, je n'ai pas de traitement réactif à faire.
une fois l'objet mesuré, il continue de vivre sa vie.
le resultat de l'optimisation est utile à un controleur qui fera du boulot
bien plus "loin" et ou le systeme fera attendre l'objet jusqu'à ce que le
résultat arrive.
> >le temps
> > de réaction de l'application qui fait le traitement derrière n'est
> > fondamental (du moment qu'il est inférieur à l'intervalle entre deux
> > mesures).
>
> Très intelligent ca. c'est du style : " la température n'est pas un
problème
> fondamental (du moment qu'elle ne descent pas en dessous de 25 degrées)"
> :-))
non, sur le coup la, il a bien vu.
par chance, je n'ai pas de traitement réactif à faire.
une fois l'objet mesuré, il continue de vivre sa vie.
le resultat de l'optimisation est utile à un controleur qui fera du boulot
bien plus "loin" et ou le systeme fera attendre l'objet jusqu'à ce que le
résultat arrive.
Je n'en suis pas certain justement. AMcD ou un autre habitué du DDK
sait peut être : est-ce qu'il n'est pas possible de spécifier une INT
Level au moment de l'installation d'un driver? De toute façon, vu le
type d'application, il doit être possible de contrôler au moins
partiellement l'activité des périphériques présents.
Je n'en suis pas certain justement. AMcD ou un autre habitué du DDK
sait peut être : est-ce qu'il n'est pas possible de spécifier une INT
Level au moment de l'installation d'un driver? De toute façon, vu le
type d'application, il doit être possible de contrôler au moins
partiellement l'activité des périphériques présents.
Je n'en suis pas certain justement. AMcD ou un autre habitué du DDK
sait peut être : est-ce qu'il n'est pas possible de spécifier une INT
Level au moment de l'installation d'un driver? De toute façon, vu le
type d'application, il doit être possible de contrôler au moins
partiellement l'activité des périphériques présents.