> try: > msg = my_queue.get(False) > except Queue.Empty: > return > # process message I think that this spends a lot of CPU checking the queue (for nothing most of the time)
something like this, will wait, using no CPU, most of the time and sometimes, will get something out of the queue and process it. > t = threading.Thread(target=check) > def check(): > running = True > while running: > msg = my_queue.get() > if msg == 'stop': > runnning = False > else: > process_msg(msg) but, it's in a thread :/ I am not a specialist, so maybe, this is not correct ! but it's what I think... Thank you for your explanation of pyglet FPS. It's clear to me now. Still, I do not find how to emit a event that will redraw my window, or part of it. Your code with use of schedule() is the best solution so far. I feel sad to not be able to simply refresh the objects that need to, based on an event (instead of checking periodically). I will search little but more ! On 11 fév, 20:31, claudio canepa <[email protected]> wrote: > On Sat, Feb 11, 2012 at 12:12 PM, Philippe <[email protected]> wrote: > > nice help ! thank you. > > > about the queue, personally, I use the thread safe Queue.Queue() > >http://docs.python.org/library/queue.html#module-Queue > > > then, something like that > > while running: > > msg = my_queue.get(True, 0.1) > > > no need of threading.Lock() like that. > > > I checked the schedule function you used in the GameCtrl (line 65). > > from the doc "Schedule a function to be called every frame" > > What does it mean "every frame" ? > > Is there a fix framerate in cocos2D ? > > While starting the window with director.init(...) you can pass a kw-param > vsync = True / False > Default is True, which means pyglet will try to synchronize with the > vertical retrace. > But, if your code don't have any schedule() call, it will try to spare > battery and cpu / gpu , thus calling about 10 times per second. > > You can see the actual fps with > director.show_FPS = True > > > I will try to do like above (in a thread): > > while running: > > msg = my_queue.get(True, 0.1) > > > meaning that it waits all the time, and sometime get something from > > the queue. > > the 0.1 means that it will not wait for ever anyway. then, if > > runnning==false, the thread will exit (simple way to close the > > application). > > Why not get with > try: > msg = my_queue.get(False) > except Queue.Empty: > return > # process message > > This way you don't spend time waiting in an empty queue > > > I think that with you 2nd sample, I can do what I need. > > thanks a lot ! > > Glad > > No doubt you will find some interesting things with threading + pyglet, > consider to take notes and blog / post somewhere your findings > > -- > claudio -- You received this message because you are subscribed to the Google Groups "cocos2d discuss" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/cocos-discuss?hl=en.
