I can't help with your code but I did write one program using threads and Win32::OLE that I finally got to work. This worked for me:
Don't 'use Win32::OLE'.
Create all the threads I wanted first.
Then only in the main thread or at least only in one thread, 'require Win32::OLE' to do what I needed.