module cwiid and threading: how to use cwiid.Wiimote without blocking
News123
news123 at free.fr
Tue Nov 11 16:15:53 EST 2008
The only solution, that I found was recompiling the libcwiid wrapper,
such that it allows threading (the patch existed already on the libcwiid
Trac data base, though it's not part of an official release)
bye
N
News123 wrote:
> Hi,
>
> I'm using the module cwiid to conncet to a wiimote.
>
> import cwiid
> wiimote = cwiid.Wiimote()
>
> This function is blocking:
> It waits until it could sucessfully connect to a device or
> until 20 seconds passed without sucessful connection.
>
> As I wanted to do some things even if the wii-mote is not
> connected I though about creating a thread, which tries connecting
> until it is sucessfully connected
> and let the application do something else meanwhile.
>
> Unfortunately it seems, that the call to cwiid.Wiimote() blocks
> all threads.
> Probably the call to Wiimote() doesn't release the GIL.
>
>
> So my question:
>
> Is there anybody knowing if there's any trick in python or
> in libcwiid to avoid this 'complete block'
>
> The only idea, that I have is to do the polling in a second process.
> I'm just not sure though how I could pass the sucessfully connected
> device to the parent process without creating pipes or
>
> thanks for any ideas and bye
>
> N
>
> P.S. Attached a test script and its output:
>
> #[code]
> import os,sys,time,threading,cwiid
> class wii_thread(threading.Thread):
> def run(self):
> wm = None
> while not wm:
> try:
> print "try to connect"
> wm=cwiid.Wiimote()
> except:
> print "Didn't find wiimote will retry"
> time.sleep(0.5)
> print "setup wiimote,poll and queue wii events"
> time.sleep(1000)
> if __name__ == '__main__':
> wii_thrd = wii_thread()
> wii_thrd.start()
> while True:
> print 'do something'
> time.sleep(1)
> #[code end]
>
> # the output
> ##################
> do something
> try to connect
> No wiimotes found
> Didn't find wiimote will retry
> do something
> try to connect
> setup wiimote,poll and queue wii events
> do something
> do something
> do something
> Traceback (most recent call last):
> File "./threadprob.py", line 22, in <module>
> time.sleep(1)
> KeyboardInterrupt
>
>
More information about the Python-list
mailing list