![]() |
Open Lighting Architecture
0.9.4
|
The base class for the dedicated libusb thread.
Asynchronous I/O for libusb requires either i) a dedicated thread ii) integration with the i/o event loop. From the libusb documentation, i) has the advantage that it works on Windows, so we do that.
However, there is no easy way to interrupt libusb_handle_events(). Instead we use either libusb_close (for the non-hotplug case) or libusb_hotplug_deregister_callback() (for the hotplug case) to wake libusb_handle_events().
Both these techniques have require care to avoid deadlocks / race conditions. For the non-hotplug case, it's imperative that libusb_open() and libusb_close() are paired with calls to OpenHandle() and CloseHandle().
http://libusb.sourceforge.net/api-1.0/group__asyncio.html covers both approaches.
Public Member Functions | |
| LibUsbThread (libusb_context *context) | |
| Base constructor. | |
| virtual | ~LibUsbThread () |
| Destructor. | |
| virtual bool | Init () |
| Initialize the thread. | |
| virtual void | Shutdown () |
| Shutdown the thread. | |
| void * | Run () |
| The entry point to the libusb thread. | |
| virtual void | OpenHandle ()=0 |
| This must be called whenever libusb_open() is called. | |
| virtual void | CloseHandle (libusb_device_handle *handle)=0 |
| This must be called whenever libusb_close() is called. | |
Protected Member Functions | |
| void | SetTerminate () |
| Indicate that the libusb thread should terminate. | |
| void | LaunchThread () |
| Start the libusb thread. | |
| void | JoinThread () |
| Join the libusb thread. | |
| libusb_context * | Context () const |
| Return the libusb_context this thread uses. | |
Additional Inherited Members | |
Private Member Functions inherited from ola::thread::Thread | |
| Thread (const Options &options=Options()) | |
| Create a new thread with the specified thread options. | |
| virtual | ~Thread () |
| Destructor. | |
| virtual bool | Start () |
| Start the thread and wait for the thread to be running. | |
| virtual bool | FastStart () |
| Start the thread and return immediately. | |
| virtual bool | Join (void *ptr=NULL) |
| Join this thread. | |
| bool | IsRunning () |
| Check if the thread is running. | |
| ThreadId | Id () const |
| Return the thread id. | |
| std::string | Name () const |
| Return the thread name. | |
| virtual void * | Run ()=0 |
| The entry point for the new thread. | |
Static Private Member Functions inherited from ola::thread::Thread | |
| static ThreadId | Self () |
| Returns the current thread's id. | |
|
inlineexplicit |
Base constructor.
| context | the libusb context to use. |
|
inlineprotected |
Return the libusb_context this thread uses.
| void * ola::plugin::usbdmx::LibUsbThread::Run | ( | ) |
The entry point to the libusb thread.
Don't call this directly. It's executed when the thread starts.
|
inlineprotected |
Indicate that the libusb thread should terminate.
This doesn't wake up libusb_handle_events(), it simply sets m_term to true.
1.8.1.2