[Qt4] wacht op signaal

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo iedereen,

Ik ben bezig met een programma te schrijven in Qt. Nu zit ik met een probleem waar ik maar niet uitgeraak. Ik ben aan een spel bezig dat op twee computers syncroon moet lopen. Een computer is server. De situatie ziet er als volgend uit. De server genereerd een next piece(random number) Dit random nummer stuur ik door naar de client.De client moet echter wachten tot als hij een signaal binnen krijgt voordat newPiece effectief wordt aangemaakt.

Dus op het moment dat ack_piece true wordt gaat deze uit zijn loop om verder te gaan. Deze wordt dan direct terug op false. Zo werkt het niet want dan loopt mijn programma vast. Is er misschien een sleep functie of iets dergelijke? Ik vind niks zinvol in de documentatie.

code:
1
2
3
4
5
6
7
8
9
else
    {
        while(!ack_piece) // <---- Dit loopt vast
        {
        }
        this->set_ack_piece(false);
        qDebug()<<"beginstadium van nextpiece = "<<nextpiece_temp;
        nextPiece.setRandomShape(nextpiece_temp);
    }

[ Voor 3% gewijzigd door Verwijderd op 06-05-2012 16:17 ]


Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 18-09 09:28
Wat je nu hebt is een busy wait. De oplossing voor jouw probleem zul je vinden in de concurrency mogelijkheden van QT, ik zou hier eens beginnen en kijken naar mutexen e.d.

[ Voor 11% gewijzigd door IceM op 06-05-2012 17:22 ]

...


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Een event loop is makkelijker en wordt ook door Qt ondersteunt (sterker nog, de hele GUI is er op gebaseerd). Verder kun je natuurlijk Qt's signals-and-slots gebruiken om events af te handelen.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
't Is niet eens een busy wait. Omdat er geen memory barrier in zit, is het een endless loop. Soultakers oplossing is de juiste.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein