Toon posts:

[CBUILDER] Application ProcessMessages

Pagina: 1
Acties:
  • 58 views sinds 30-01-2008

Verwijderd

Topicstarter
[old]
Ik ben met een programma bezig wat door iemand anders gemaakt is en wat ik moet uitbreiden.
Mijn voorganger heeft de regel Application->ProcessMessage(); erg vaak gebruikt en ik ben er nu achter dat deze in een lus staat die per versturen van een commando 70 keer doorlopen wordt. Na het versturen van een groot aantal commando's gaat het als maar langer duren voordat hij deze lus afhandelt. Dat komt door die processmessage regel. (gevonden door debuggen)

Maar als ik deze processmessage regel niet gebruik is het voor mij onmogelijk om het programma af te sluiten (het programma stuurt namelijk een ander programma aan via een doorgelusde compoort wat erg veel ven de processorkracht vergt)
Dus nu heb ik de regel op een plaats staan waar het niet zo vaak voorkomt. (70 keer minder dan voorheen)

MIJN VERMOEDEN:

Dat de application->processmessages in IDLE steeds langer wacht wanneer er geen activiteit is.

MIJN VRAAG.

Is het mogelijk dat ik een methode maak die eerst kijkt of er handelingen uitgevoerd moeten worden (is er op een knop gedrukt, moet er geminimaliseerd worden enzovoorts). En zo ja Dat ik dan de regel: application->processmessages();
gebruik. En als dat niet het geval is dat het programma dan gewoon door gaat met uitvoeren van commando's

plaease help?
[/old]

WIL HET NU ANDERS GAAN DOEN!!

Het volgende wil ik voor elkaar krijgen:

Wanneer er een handeling is uitgevoerd wil ik een Application->ProcessMessage krijgen. Met andere woorden: Zolang ik niet met de muis beweeg of knoppen ervan indruk. OF het toetsenbord gebruik. moet er geen Application->ProcessMessage gedaan worden.

daarvoor heb ik bedacht dat ik iets met PeekMessages zou moeten doen.

het volgende heb ik:

code:
1
2
3
4
5
        MSG lpMsg;
        if(PeekMessage(&lpMsg, NULL, 0, 0, PM_NOREMOVE))
        {
                Application->ProcessMessages();
        }


helaas werkt dit weer niet.

wat gaat er verkeerd en is de manier waarop ik het wil oplossen wel te doen? 8)7

[ Voor 23% gewijzigd door Verwijderd op 08-01-2003 09:54 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:34
Tja, misschien moet je er eens over gaan denken om met threads te werken (TThread in C++ Builder).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hoe zouden jullie dat dan oplossen want hoe dat werkt met die threads weet ik ook niet.
Kan iemand mij misschien een reden geven waarom in het begin die application->processmessages(); wel snel afgehandeld worden en later goed 10 minuten kan duren??

Verwijderd

Topicstarter
Ik heb de post geedit en zou het fijn vinden als jullie me willen helpen met het nieuwe stukje!?

Verwijderd

Je moet dat processor intensieve stuk code gewoon in een thread zetten. Een thread is gewoon een klasse die je kan overerven en waar je vervolgens de code inzet. Vervolgens kan je in je applicatie je thread aanroepen met bijv. start, waarna de code uitgevoerd wordt. De applicatie regelt het verder zelf, de thread krijgt elke keer een paar seconden om het werk uit te voeren, waarna de applicatie gaat kijken of er ondertussen een andere thread uitgevoerd moet worden. Deze thread krijgt vervolgens tijd om zijn werk uit te voeren. Dit gaat net zo lang door tot allle threads uitgevoerd zijn. Als je dus je code in een thread zet, zal de applicatie er zelf voor zorgen dat er bijvoorbeeld wel op een knop geklikt kan worden. Suc6

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Menu: File -> New -> Thread

en lees er eens wat lectuur over. Je krijgt namelijk te maken met dingen zoals synchronizatie, thread-safe, deadlocks enz...

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 07 January 2003 @ 10:13:
MIJN VERMOEDEN:
Dat de application->processmessages in IDLE steeds langer wacht wanneer er geen activiteit is.
Is gelul.
MIJN VRAAG.
Is het mogelijk dat ik een methode maak die eerst kijkt of er handelingen uitgevoerd moeten worden (is er op een knop gedrukt, moet er geminimaliseerd worden enzovoorts). En zo ja Dat ik dan de regel: application->processmessages();
gebruik. En als dat niet het geval is dat het programma dan gewoon door gaat met uitvoeren van commando's
Doet ie zelf namelijk al.
plaease help?
code:
1
2
3
4
5
        MSG lpMsg;
        if(PeekMessage(&lpMsg, NULL, 0, 0, PM_NOREMOVE))
        {
                Application->ProcessMessages();
        }

helaas werkt dit weer niet.

wat gaat er verkeerd en is de manier waarop ik het wil oplossen wel te doen? 8)7
Als je nu eens de search had gebruikt (ik kon 'm met Omega in 5 seconden terugvinden dus geen search-werkt-niet-gemekker aub) had je zo het topic gevonden waarin ik je al eens heb uitgelegd en getoond hoe ProcessMessages werkt: deze dus.

In short: gebruik TThreads. Ik heb zojuist in dit topic uitgelegd hoe het moet.

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

zie de topics die Curry aandraagt

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.

Pagina: 1

Dit topic is gesloten.