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

Reply via email to