[C] break event

Pagina: 1
Acties:

  • Daniel304
  • Registratie: December 2000
  • Laatst online: 14-08 14:02
IS er een functie die ik kan gebruiken zodat ik willekeurig ergens in het programma op een toets kan drukken om een event te triggeren ?!?

een help onder toets F1 ofzo ?!?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Welk platform?

  • Wouter Tinus
  • Registratie: Oktober 1999
  • Niet online

Wouter Tinus

Whee!

Een event kun je triggeren ja, maar een druk op F1 is al een event, dus waarom moeilijk doen ;).

Wat je waarschijnlijk bedoelt is het event "F1 ingedrukt" afvangen?

Als het over Windows gaat kun je de WM_KEYDOWN afvangen en checken of de key in kwestie "VK_F1" is.

Professioneel Hyves-weigeraar


  • Daniel304
  • Registratie: December 2000
  • Laatst online: 14-08 14:02
Unix platform met GCC (c en geen c++)

F1 is idd al een key_press_event.. Maar ik wil hem dus willekeurig wanneer en waar hij ingedrukt word iets kunnen laten gebeuren (zoals een subroutine aanroepen)

  • Wouter Tinus
  • Registratie: Oktober 1999
  • Niet online

Wouter Tinus

Whee!

Op maandag 01 juli 2002 14:57 schreef Daniel304 het volgende:
Unix platform met GCC (c en geen c++)
F1 is idd al een key_press_event.. Maar ik wil hem dus willekeurig wanneer en waar hij ingedrukt word iets kunnen laten gebeuren (zoals een subroutine aanroepen)
Dan zal het waarschijnlijk ongeveer hetzelfde werken als in Windows, in de code die het key_press_event afhandeld moet je controleren of de key de F1 knop is. Zoja -> help(); Zonee -> // doe niets :)

De help(); kun je dan ook natuurlijk ook gewoon blijven aanroepen vanuit andere delen van je programma.

Je zult denk ik even moeten opzoeken welke parameters er met key_press_event meekomen en hoe je daaruit kunt bepalen of de knop F1 is of niet.

Professioneel Hyves-weigeraar


  • Daniel304
  • Registratie: December 2000
  • Laatst online: 14-08 14:02
het leuke is dat het key_press_event altijd aanwezig moet zijn ookal ben je met scanf een string aan het inlezen... Ik kan geen enkel help filetje vinden !!!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op maandag 01 juli 2002 15:21 schreef Daniel304 het volgende:
het leuke is dat het key_press_event altijd aanwezig moet zijn ookal ben je met scanf een string aan het inlezen... Ik kan geen enkel help filetje vinden !!!
Ik heb geen idee hoe dit op unix is geregeld. Op de console werk je?

Maar onder windows gebruik je dan threads (workerthreads). De actie (inlezen met scanf) gebeurt dan in een aparte thread terwijl je applicatie ondertussen nog steeds kan reageren op events.

Maar met threads werken is toch vrij ingewikkeld en neigt al snel naar instabiliteit. Een andere mogelijkheid zou kunnen zijn dat je in dat intensieve proces (inlezen) om de zoveel tijd een functie aanroept die checkt of er al nieuwe key-presses zijn, die verwerkt en dan weer terugkeert. Deze laatste methode zou ik voor een simpel programma gebruiken.

Verwijderd

als je op ctrl+c drukt in de linux termintal, wordt er een SIGTERM naar het actieve process gestuurd. Hiervoor kan je een signal handler schrijven om dat af te vangen, maar dat is nou niet bepaald een makkelijke/handige oplossing waarschijnlijk..

Moet je overigens niet naar een speciale terminal mode overswitchen als je meer wilt afvangen dan dat je met bv getchar kan doen? (ncurses).

  • igmar
  • Registratie: April 2000
  • Laatst online: 23-08 16:57

igmar

ISO20022

Op maandag 01 juli 2002 14:57 schreef Daniel304 het volgende:
Unix platform met GCC (c en geen c++)

F1 is idd al een key_press_event.. Maar ik wil hem dus willekeurig wanneer en waar hij ingedrukt word iets kunnen laten gebeuren (zoals een subroutine aanroepen)
Nee, je moet gewoon raw uitlezen. Er is geen methode om een event te koppelen aan een toets.

  • BitProcessor
  • Registratie: Februari 2001
  • Laatst online: 30-08 23:59
Op maandag 01 juli 2002 14:33 schreef Daniel304 het volgende:
IS er een functie die ik kan gebruiken zodat ik willekeurig ergens in het programma op een toets kan drukken om een event te triggeren ?!?

een help onder toets F1 ofzo ?!?
Thread aanmaken die "luistert" naar die key ? Misschien met een childproces. Je moet IMHO in ieder geval een loopje kunnen maken dat continu gaat kijken of je een toets al of niet hebt ingedrukt.

"I think there is a world market for maybe five computers" - Thomas Watson, chairman of IBM, 1943

Pagina: 1