Ola,
IupLoopStep is not for multithreading purposes, it is for allowing queued Windows messages to pass through to other apps that are waiting for Windows messages. This usually happens when you do something, say like draw 10,000 ellipses, which takes a long time, and during that time other apps will run slowly or not at all because they might be waiting for Windows messages. Notice how it has nothing to do with the GUI. If you want to pause or interrupt a thread, follow the directions given here: https://docs.microsoft.com/en-us/dotnet/standard/threading/pausing-and-resuming-threads. Notice it has nothing to do with the GUI. If you want to communicate with a thread (usually via pipes), follow the directions given here: https://docs.microsoft.com/en-us/windows/win32/ipc/interprocess-communications. Notice it has nothing to do with the GUI. Regards, Andrew On 2019-07-04 at 2:58 PM, Antonio Scuri <antonio.sc...@gmail.com> wrote: Hi, The thread situation is generally used when the application actually do multiprocessing of somehow. > What do IUP users typically do when they have a long running process they need to provide UI feedback on, but can't break the long running process up into time slices suitable for IupTimer? Just for a long running process, to free the interface and allow the user to interact with a cancel button for instance, you just have to call IupLoopStep from inside your long loop. Calling IupLoopStep several times will allow the events to be processed. You can implement a counter for instance, that displays progress by calling a function from inside your loop and in that function call IupLoopStep and also update a IupGauge or IupProgressBar in your interface. Best, Scuri Em qui, 4 de jul de 2019 às 18:29, Matthew Kennedy <burnsid...@gmail.com> escreveu: I'm a bit stumped on how to communicate with the IUP thread from another thread. Are the options basically polling from idle action, or an IupTimer callback? I measured the idle action overheard and it's basically 8% of a CPU core and so an IupTimer seems better. If I use an IupTimer though, I'll need to pick a timer rate. I could queue up the functions I want to run on the main thread and drain the queue on a single IupTimer callback, though. Another approach perhaps is to set a semaphore on the non IUP thread when assigning the idle function (i.e. when calling IupSetFunction for IDLE_ACTION) and then signaling the semaphore on the IUP thread from *within the callback* just before it returns IUP_IGNORE. This has it's own problems though, since the callback's not really complete until IUP_IGNORE *is* returned. Hmmm... What do IUP users typically do when they have a long running process they need to provide UI feedback on, but can't break the long running process up into time slices suitable for IupTimer? Matt On Thu, Jul 4, 2019 at 2:31 PM Antonio Scuri <antonio.sc...@gmail.com> wrote: No, there isn't. Once the idle is set, it will be called the next time the MainLoop regain control. But your are setting from another thread so the mainloop is running. Maybe the solution would be to set the idle in the main loop thread where you can have more control about that. Best, Scuri Em qui, 4 de jul de 2019 às 15:18, Matthew Kennedy <burnsid...@gmail.com> escreveu: Hi, I've trawled through the mailing list archives trying to research this. I hope I haven't missed a solution to this already: I have IUP's main-loop running on thread, and I have another thread that needs to update something in the GUI. I gather it's not safe to call IUP functions from a NON IUP main-loop thread, so I've settled on acquiring a lock on and setting the IUP idle function to a function that includes the work needed to be performed by the non IUP main-loop thread (returning IUP_IGNORE, so as to run once). This works pretty well, but I believe if the NON IUP main-loop thread sets IUP idle function faster than the idle function is called by IUP, then my IUP idle functions will not always be called. Is there a way to set the idle function and wait for it to be called? Or even some way to set the idle function and trigger it to run immediately? Matt _______________________________________________ Iup-users mailing list Iup-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/iup-users _______________________________________________ Iup-users mailing list Iup-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/iup-users _______________________________________________ Iup-users mailing list Iup-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/iup-users
_______________________________________________ Iup-users mailing list Iup-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/iup-users