From: Geoff <gb...@ki...> - 2008-09-20 07:46:05
|
InQueue->SetPull(true) is changing the driver's message queue to pull mode, which means you need to explicitly pull messages of the queue in the driver's loop. They won't be pulled off and sent to ProcessMessage() automatically. Geoff Patrick Beeson wrote: > I just found a weird behavior that I think is a bug or masks a bug in > Player 2.1.1. > > For a plugin or driver, if you call InQueue->SetPull(true) (this is left > over from Player 2.0.5 and I'm not sure its necessary anymore), then > ProcessMessages() never calls the local ProcessMessage() method on the > Driver class. > > It's very simple to test, build a driver (e.g. the OpaqueDriver from the > Player 2.1.1 source), and make a simple client that sends a command to > this driver. Add a print statement in the local ProcessMessage of the > driver, no need to actually handle the command sent. > > Run Player and the client to see the printed statement each time the > client sends the command down. > > Now, Add the SetPull(true) command from above to the Driver's constructor. > > Run it again, and the print statement has no effect because > ProcessMessage in the driver is never called. Add more print statements > around ProcessMessages() in the main loop and you'll see that it is > still being called. > > To me SetPull(true) might have some change to the way messages are > passed (I never fully understood that this did on the DRIVER side, as it > wasn't ever documented satisfactorily -- at least no where that I saw), > but it shouldn't cause ProcessMessage() to not be called. > > Because this is not the default, I'm worried it could be hiding other > bugs that may exist in the 2.1 branch, and right now I don't have time > to investigate this further. > > > |