Hi,

I'm writing a picture browser program and I'd like to ask for a bit of assistance.

My app is basically a Win32 window with an OpenGL surface. Currently I'm able to display a lot of pictures in it. The decompression of the bitmaps take place at the beginning of the program.

I want to make this more user friendly, so at first I only draw placeholders for the pictures while the actual loading and decompression is happening on worker threads.

I used std.concurrency.spawn. The parameters are the filename, and an index. After the decompression I let the main thread know about there is a bitmap it should upload to a texture later. I do it using synchronize, it works without error and was really easy to implements in D.

My problem is that when I launch 1000 spawn(), the work overload on the main thread is so heavy that the 60FPS timer which is refreshing the windows never can be called. Obviously spawn() is not the right choice for this.

In my previous projects I addressed this by creating NumberOfProcessorThreads threads,and locked them on specific ProcessorThreads by using ProcessAffinity, so the main thread has enough time to generate fluid user interface while the other worker threads used 100%CPU for the fastest processing.

I also remember that with OPENMP I was also able to lock workers onto specific ProcessorThreads, it also worked fine.

But how can I do this elegantly in D?

Thanks in advance!


(Also I'm not sure how spaw()-n is working exactly. Is it creates a new process for every spawn() call, or is it assigns the task to one of the N worker processes? 1000 CreateProcess() api calls would be not so nice. I just wanna know it in order to avoid it.)

Reply via email to