Esben von Buchwald wrote:
Dennis Lee Bieber wrote:

    The only other thing I could suggest is exactly what is done on:
http://pys60.garage.maemo.org/doc/s60/node59.html

    Initialize a counter value to 0, then increment it in the callback,
only doing REAL work every n calls.


    def doCallback(self):
        if self.count % 35 == 0:    #doc says 35 hits/second, so this
            self.data_callback()    #will run one once per second
        self.count += 1

    You'll still get that slew of backlogged callbacks that built up
while doing the real processing, but unless self.data_callback() takes
more time than the "35" covers, most of the callbacks will just come in
and exit with an increment.

Of course I can do that.


But it'll only make a noticable delay EVERY time the user moves, and not prevent the build up of calls if it doesn't finish within the 35 callbacks.

The point is that I don't know in advance, how long the call will take. It depends on the amount of data i load and process during the call. I only know when the calculations have finished, and when they are called, and think there might be some way to block further callbacks until the first one returns?

You could record when your callback finishes (is about to return) and
then ignore any callback that happens too soon after that:

    def doCallback(self):
        now = time.time()
        if now - self.last_call >= MIN_TIME:
            self.data_callback()
            now = time.time()
        self.last_call = now
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to