Pour un programme C d'acquisition de données cinétiques via un port COM
(spectro), j'ai besoin de pouvoir sortir de la boucle d'acquisition (temps
d'acquisition jugé suffisant par ex.) par appui sur la touche ESC par ex,
mais sans ralentir l'acquisition, cad s'il n' a pas appui sur la touche
ESC, on continue d'acquérir.
Cela exclue les fonctions standards qui demandent un appui sur ENTER en
supplément...
J'ai bien trouvé sur le web une fonction kbhit() qui fait appel à
getch() mais mon compilateur (CodeWarrior 6 pour Windows) me renvoie
systématiquement 2 erreurs à la compilation:
- kbhit() fonction sans prototype
- getch() fonction sans prototype
alors qu'avec les mêmes #includes (#conio.h, stdio.h, stdlib.h) , ca se
compile très bien avec DevC++.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Burel
"Hervé TOURBEZ" wrote in message news:
Bonjour,
Pour un programme C d'acquisition de données cinétiques via un port COM (spectro), j'ai besoin de pouvoir sortir de la boucle d'acquisition (temps d'acquisition jugé suffisant par ex.) par appui sur la touche ESC par ex, mais sans ralentir l'acquisition, cad s'il n' a pas appui sur la touche ESC, on continue d'acquérir.
Cela exclue les fonctions standards qui demandent un appui sur ENTER en supplément...
J'ai bien trouvé sur le web une fonction kbhit() qui fait appel à getch() mais mon compilateur (CodeWarrior 6 pour Windows) me renvoie systématiquement 2 erreurs à la compilation:
- kbhit() fonction sans prototype - getch() fonction sans prototype
alors qu'avec les mêmes #includes (#conio.h, stdio.h, stdlib.h) , ca se compile très bien avec DevC++.
Une idée?
Ben, déjà vous avez intérêt à utiliser les fonctions windows CreateFile / WriteFile / ReadFile (ainsi que les fonctions connexes : Set/GetCommState Set/GetCommTimeouts). Si c'est juste une acquisition, vous pouvez configurer les fonctions en mode OVERLAP (mode événementielle).
Sinon, usuellement un flux de données est encapsulé dans une boucle (read / write) tournant dans un thread différent que le thread primaire (thread GUI). les données sont transférés via une pile de buffer (mode consommateur / producteur).
VB
"Hervé TOURBEZ" <herve.tourbez@curie.u-psud.fr> wrote in message
news:herve.tourbez-2609061816500001@vec.curie.u-psud.fr...
Bonjour,
Pour un programme C d'acquisition de données cinétiques via un port COM
(spectro), j'ai besoin de pouvoir sortir de la boucle d'acquisition (temps
d'acquisition jugé suffisant par ex.) par appui sur la touche ESC par ex,
mais sans ralentir l'acquisition, cad s'il n' a pas appui sur la touche
ESC, on continue d'acquérir.
Cela exclue les fonctions standards qui demandent un appui sur ENTER en
supplément...
J'ai bien trouvé sur le web une fonction kbhit() qui fait appel à
getch() mais mon compilateur (CodeWarrior 6 pour Windows) me renvoie
systématiquement 2 erreurs à la compilation:
- kbhit() fonction sans prototype
- getch() fonction sans prototype
alors qu'avec les mêmes #includes (#conio.h, stdio.h, stdlib.h) , ca se
compile très bien avec DevC++.
Une idée?
Ben, déjà vous avez intérêt à utiliser les fonctions windows CreateFile /
WriteFile / ReadFile (ainsi que les fonctions connexes : Set/GetCommState
Set/GetCommTimeouts).
Si c'est juste une acquisition, vous pouvez configurer les fonctions en mode
OVERLAP (mode événementielle).
Sinon, usuellement un flux de données est encapsulé dans une boucle (read /
write) tournant dans un thread différent que le thread primaire (thread
GUI). les données sont transférés via une pile de buffer (mode consommateur
/ producteur).
Pour un programme C d'acquisition de données cinétiques via un port COM (spectro), j'ai besoin de pouvoir sortir de la boucle d'acquisition (temps d'acquisition jugé suffisant par ex.) par appui sur la touche ESC par ex, mais sans ralentir l'acquisition, cad s'il n' a pas appui sur la touche ESC, on continue d'acquérir.
Cela exclue les fonctions standards qui demandent un appui sur ENTER en supplément...
J'ai bien trouvé sur le web une fonction kbhit() qui fait appel à getch() mais mon compilateur (CodeWarrior 6 pour Windows) me renvoie systématiquement 2 erreurs à la compilation:
- kbhit() fonction sans prototype - getch() fonction sans prototype
alors qu'avec les mêmes #includes (#conio.h, stdio.h, stdlib.h) , ca se compile très bien avec DevC++.
Une idée?
Ben, déjà vous avez intérêt à utiliser les fonctions windows CreateFile / WriteFile / ReadFile (ainsi que les fonctions connexes : Set/GetCommState Set/GetCommTimeouts). Si c'est juste une acquisition, vous pouvez configurer les fonctions en mode OVERLAP (mode événementielle).
Sinon, usuellement un flux de données est encapsulé dans une boucle (read / write) tournant dans un thread différent que le thread primaire (thread GUI). les données sont transférés via une pile de buffer (mode consommateur / producteur).
VB
Bertrand Lenoir-Welter
Hervé TOURBEZ wrote:
J'ai bien trouvé sur le web une fonction kbhit() qui fait appel à getch() mais mon compilateur (CodeWarrior 6 pour Windows) me renvoie systématiquement 2 erreurs à la compilation:
Ca sent le bon vieux code pour DOS et on dirait que vous n'êtes pas familier de la programmation événementielle sous Windows. Typiquement, vous devez d'une part créer un thread qui va s'occuper de votre port COM, ce qui vous libère des contingences de délai pour traiter le reste, et d'autre part attraper un WM_KEYDOWN dans la pompe à messages de votre application, en filtrant sur la touche VK_ESCAPE. Si vous utilisez un compilo C++ avec encapsulation de l'API Windows, vous devez disposer d'une possibilité de surcharge de fonction EvKeyDown().
L'idée centrale, c'est que votre boucle de lecture du port et la surveillance du ESC sont dans des threads différents. Sinon, vous pouvez aussi bricoler avec GetAsyncKeyState(VK_ESCAPE) dans la boucle de lecture du port, mais ce sera moins joli.
Hervé TOURBEZ wrote:
J'ai bien trouvé sur le web une fonction kbhit() qui fait appel à
getch() mais mon compilateur (CodeWarrior 6 pour Windows) me renvoie
systématiquement 2 erreurs à la compilation:
Ca sent le bon vieux code pour DOS et on dirait que vous n'êtes pas
familier de la programmation événementielle sous Windows. Typiquement,
vous devez d'une part créer un thread qui va s'occuper de votre port
COM, ce qui vous libère des contingences de délai pour traiter le reste,
et d'autre part attraper un WM_KEYDOWN dans la pompe à messages de votre
application, en filtrant sur la touche VK_ESCAPE. Si vous utilisez un
compilo C++ avec encapsulation de l'API Windows, vous devez disposer
d'une possibilité de surcharge de fonction EvKeyDown().
L'idée centrale, c'est que votre boucle de lecture du port et la
surveillance du ESC sont dans des threads différents. Sinon, vous pouvez
aussi bricoler avec GetAsyncKeyState(VK_ESCAPE) dans la boucle de
lecture du port, mais ce sera moins joli.
J'ai bien trouvé sur le web une fonction kbhit() qui fait appel à getch() mais mon compilateur (CodeWarrior 6 pour Windows) me renvoie systématiquement 2 erreurs à la compilation:
Ca sent le bon vieux code pour DOS et on dirait que vous n'êtes pas familier de la programmation événementielle sous Windows. Typiquement, vous devez d'une part créer un thread qui va s'occuper de votre port COM, ce qui vous libère des contingences de délai pour traiter le reste, et d'autre part attraper un WM_KEYDOWN dans la pompe à messages de votre application, en filtrant sur la touche VK_ESCAPE. Si vous utilisez un compilo C++ avec encapsulation de l'API Windows, vous devez disposer d'une possibilité de surcharge de fonction EvKeyDown().
L'idée centrale, c'est que votre boucle de lecture du port et la surveillance du ESC sont dans des threads différents. Sinon, vous pouvez aussi bricoler avec GetAsyncKeyState(VK_ESCAPE) dans la boucle de lecture du port, mais ce sera moins joli.