We used to use a somewhat convoluted process of multithreading since refreshing the devices could take some time. Now we use the high-level QtConcurrent API which reduces much of the complexity on our end and makes the code more manageable.