Is there any specific reason each panel gets its own thread? When it is speed, I don't think this works much faster than one seperate thread handling all the updates. There are only so much operations a computer can do in 0.1 seconds 🙂
If every panel has to do some I/O with external instruments I can see why seperate threads are needed (otherwise 19 panels would be waiting for the apparatus of panel 20 to respond), but otherwise... I'm not sure.
Have you tried to create on large update-thread, and was the load any different? If you need all the threads, you might want to use the Sleep() function from the Windows SDK to wait 0.1 seconds. That might reduce the load a little.
Two general speed issues: SetCtrlAttribute works faster than SetCtrlVal, and with graphs using a thin line instead of connected points works faster as well.
Good luck!
Erwin Timmerman