[VC++] Passief luisteren naar LPT poort

Pagina: 1
Acties:

  • Marcj
  • Registratie: November 2000
  • Laatst online: 10-09 13:43
Ik heb nu zo'n grafische LCD gekocht, maar ik wil er ook graag knopjes onder hebben. Nu snap ik dat allemaal wel, maar is het ook mogelijk om passief een programma te laten wachten tot een knopje is ingedrukt? Ik vond de oplossing van een loop met een sleep() erin namelijk niet zo mooi (vergt veel van de processor)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Dan moet je met threads gaan werken. Op MSDN (www.microsoft.com/msdn) staat genoeg over de win32 thread functies.

Verwijderd

als je 4-5 keer perseconde even kijkt op die port is meer dan genoeg (sleep van ~200ms) dat kan nooit 'n hoge load opleveren. Als je zelf 'n loopje maakt met queryperformance counter tjah dan gaat het idd wel cpu zuipen..

  • Marcj
  • Registratie: November 2000
  • Laatst online: 10-09 13:43
Op maandag 01 april 2002 22:32 schreef Orphix het volgende:
Dan moet je met threads gaan werken. Op MSDN (www.microsoft.com/msdn) staat genoeg over de win32 thread functies.
Threads betekent toch gewoon dat je meerdere loops tegelijk kan doen in je programma? En dan zit ik weer met een loop ;)

Verwijderd

Ik zie nog steeds niet in wat je tegen 'n loop hebt. 't is een prima oplossing.

  • Marcj
  • Registratie: November 2000
  • Laatst online: 10-09 13:43
Ben bang dat het een hele hoge processorload opleverd :)

Verwijderd

In de tijd dat jij je sleep aan roept, mogen anderen processen de cpu gebruiken dus nix om bang voor te zijn.

  • Marcj
  • Registratie: November 2000
  • Laatst online: 10-09 13:43
Ik probeer het morgen denk ik wel even (eerst ff nog wat onderdelen bij de electronicazaak weghalen ;)) of het dan wel goed werkt
Ik dacht echt dat er een betere manier wat, dat het programma pas iets gaat doen als er op die knop gedrukt wordt.

Verwijderd

enige waar je wel op moet letten dat je read/write operaties elkaar niet in de weg gaan zitten als je met threads aan de gang gaat..

  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
ik gebruik vaak in een thread een loop

while(!bStop)
{

sleep(50);
}

met een sleep, om de load wat te verminderen, werkt perfect

bStop is een bool waarmee je de thread dus stopt

/me weet geen leuke quote voor in zijn signature


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09-09 22:48

.oisyn

Moderator Devschuur®

Demotivational Speaker

.edit: hier stond onzin, niet goed gelezen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op maandag 01 april 2002 22:34 schreef Marcj het volgende:
Threads betekent toch gewoon dat je meerdere loops tegelijk kan doen in je programma? En dan zit ik weer met een loop ;)
Ja idd, maar meestal wil je dit toch omdat anders de rest van je programma niks kan doen. In een multi-tasking omgeving zoals Windows wil je vaak dat bv je GUI onafhankelijk werkt van cpu-intensieve taken.

Verder zou ik ook geen andere manier weten dan pollen icm een sleep. Je kan altijd nog de thread priority omlaag schroeven als het te intensief wordt (ten koste van nauwkeurigheid). En heel misschien kan je ergens in windows een hook instellen wanneer data binnenkomt op de lpt poort, maar daar weet ik verder weinig van.

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Op maandag 01 april 2002 22:29 schreef Marcj het volgende:
Ik heb nu zo'n grafische LCD gekocht, maar ik wil er ook graag knopjes onder hebben. Nu snap ik dat allemaal wel, maar is het ook mogelijk om passief een programma te laten wachten tot een knopje is ingedrukt? Ik vond de oplossing van een loop met een sleep() erin namelijk niet zo mooi (vergt veel van de processor)
op welke manier lees je de data van je LPT1 poort uit? Als dat een 'gewone' filehandle is, moet je eens kijken naar WaitForSingleObject e.d, op die manier kan je je thread blocken totdat er data is op een of meerdere handles.

Verwijderd

Voor de aansturing van lcd's is 99% van de tijd dlportio gebruikt waardoor je dus echt zelf moet gaan pollen voor data.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:56

Creepy

Tactical Espionage Splatterer

Als je de lpt poort opent als file, gaat windows er vanuit dat wat je naar die file stuurt, naar een printer moet. De data die je er uit leest, is volgens mij dan alleen de status van de data poort, en niet de control of status poort (waar meestal de knopjes aan hangen).

Als je die wilt uitlezen moet je dus zelf op I/O leven gaan kijken (dus NIET openen als een file). Je moet dan wel meer zelf doen, maar je kan wel alles checken van de LPT poort.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Marcj
  • Registratie: November 2000
  • Laatst online: 10-09 13:43
Ik heb al DLportIO gedownload, en daar zit een duidelijk voorbeeld bij, dus daar kom ik wel uit ;)

Verwijderd

ik heb ook een programmatje gemaakt voor 4 knopjes voor bij mijn 2x16 lcd. ik gebruik ook het pollingprincipe. check sig voor meer info :)

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:26

BCC

Je kan natuurlijk ook gewoon ff de interrupt van de printerpoort op je printje aansluiten en de interrupt afvangen... Dan zul je natuurlijk wel even een device driver moeten schrijven. Onder Linux is dit een eitje, maar onder windows?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Verwijderd

Op dinsdag 02 april 2002 13:58 schreef BCC het volgende:
Dan zul je natuurlijk wel even een device driver moeten schrijven. Onder Linux is dit een eitje, maar onder windows?
Waarom denk je dat iedereen dlportio gebruikt? juist! omdat driver schrijven een hels karwij is.

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:26

BCC

Zit daar geen interrupt functie in dan?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.

Pagina: 1