Hi,I think this not a perfect solution, but can work, or not?You can not call 
directly GUI functions, but can order to call.
Main Thread: main_gui.c
int update_main_title(Ihandle * dlg, const char * title){     
IupSetAttribute(dlg, "TITLE", title);}
void msg_consumer(msg){     switch(msg->cmd) {     case MSG_UPDATE_MAIN_TITLE:  
            update_main_title(dlg, msg->text);              msg->processed = 1; 
             break;     }}
Workers Threads: thread1.c
int worker1(void){     /* update main title */     /* send message to consumer 
GUI Thread */     msg_send(thread_gui, MSG_UPDATE_MAIN_TITLE, "New Title");}
Best,
Ranier Vilela

Date: Wed, 7 Oct 2015 09:03:20 -0300
From: [email protected]
To: [email protected]
Subject: Re: [Iup-users] Is Iup pthread safe?

  You can set the IDLE function using IupSetFunction("IDLE_ACTION", my_func). 
You hacked the inner part of it.
  But be aware that the IDLE consumes CPU a lot, because it is not actually 
"idle". 
Best,Scuri

On Wed, Oct 7, 2015 at 6:15 AM, Andy Xiyue <[email protected]> wrote:
Hey guys,

Please ignore the quoted contents, I don't know why I can't receive the thread 
emails but the Iup-users Digest.

Well when I read the source code of IupMainLoop() expecting some clue, I do 
find a clue, iupdrvSetIdleFunction(). I guess it will be called inside  
IupMainLoop() when it's idle so I put a test code in there, please find the 
attached snippet.

In simple words, I moved all IUP related events into the idle function and let 
it communicate with other thread via a global variable (just to prove the 
concept, will be changed to a message queue later). It works pretty well :-)

The only problem is this approach looks like a hacking. The  
iupdrvSetIdleFunction() is an internal function which means it should not be 
called by users. Another only problem will be the CPU usage could be high 
because you have to poll your events/messages/etc constantly inside the idle 
function. It's legal but nasty.

Hi John,

I'm afraid I don't understand script basic. Any idea in C?

Hi Milind,
I thought about the timer but haven't tried it yet. How's the performance?
Hi Ranier,
I think the main issue is not choosing which IPC but how to run IPC in the main 
IUP thread. Currently I can't have the main IUP thread accepting events from 
other threads.
Hi Jörg,
It sounds we are looking at the same problem, how to unblock the gui inside 
main loop.
Hi Scuri,
Is there some method officially recommended by IUP team, similar to my hacking 
in  iupdrvSetIdleFunction(), to intercommunicating between threads? For 
example, some function call to insert IUP events into underlay event list so it 
will be processed finally in the main loop? In that case, I can send 
notification in other threads and it will trigger an event in main IUP thread 
so my codes could update the progress bar or something else?
Kind regardsAndy


On 6 October 2015 at 21:25,  <[email protected]> wrote:
Send Iup-users mailing list submissions to

        [email protected]



To subscribe or unsubscribe via the World Wide Web, visit

        https://lists.sourceforge.net/lists/listinfo/iup-users

or, via email, send a message with subject or body 'help' to

        [email protected]



You can reach the person managing the list at

        [email protected]



When replying, please edit your Subject line so it is more specific

than "Re: Contents of Iup-users digest..."





Today's Topics:



   1. Re: Is Iup pthread safe? (John Spikowski)

   2. Re: Is Iup pthread safe? (Ranier VF)

   3. Re: Is Iup pthread safe? (Andy Xiyue)

   4. Re: Is Iup pthread safe? (Milind Gupta)

   5. Re: Is Iup pthread safe? (John Spikowski)

   6. Re: Is Iup pthread safe? (Ranier VF)





----------------------------------------------------------------------



Message: 1

Date: Thu, 01 Oct 2015 23:39:24 -0700

From: John Spikowski <[email protected]>

Subject: Re: [Iup-users] Is Iup pthread safe?

To: "IUP discussion list." <[email protected]>

Message-ID: <1443767964.2357.2.camel@laptop>

Content-Type: text/plain; charset="UTF-8"



Hi Andy,



IUP isn't thread safe by default but that doesn't mean it can't be done.

Here is an example in Script BASIC (Windows & Linux)



http://www.scriptbasic.org/forum/index.php/topic,335.0.html



John





On Fri, 2015-10-02 at 14:36 +1000, Andy Xiyue wrote:

> Hi Scuri,

>

>

> Recently I tried to use IUP with more than one thread. My plan is

> simple, run IupMainLoop() in one thread and feed progress bar or text

> control in another thread. Theoretically I don't need to synchronize

> the IUP calls because the IupMainLoop() will process the events sooner

> or later. However I met a lot of problems. Sometimes the client area

> became invalided without refresh. Sometimes I got a core dump

> triggered by X11 event. For example, the attached file was simplified

> from my program. When the progress bar running, if you select text in

> the text control, the app will received sig 11:

>

> iqiup: Fatal IO error 11 (Resource temporarily unavailable) on X

> server :0.0.

>

>

> It looks like I misunderstood the programming model of IUP. Is IUP

> safe to update the attribution of controls in different thread? If

> it's not, how can I manually send events to the main loop to update

> the controls?

>

>

> Kind regards

>

> Andy

>

> ------------------------------------------------------------------------------

> _______________________________________________

> Iup-users mailing list

> [email protected]

> https://lists.sourceforge.net/lists/listinfo/iup-users











------------------------------



Message: 2

Date: Fri, 2 Oct 2015 10:03:13 +0000

From: Ranier VF <[email protected]>

Subject: Re: [Iup-users] Is Iup pthread safe?

To: IUP discussion list. <[email protected]>

Message-ID: <[email protected]>

Content-Type: text/plain; charset="iso-8859-1"



Hi,Neither GUI is thread safe.You need call Thread GUI, to update the 
interface.From: http://webserver2.tecgraf.puc-rio.br/iup/MultithreadUser 
interface is usually not thread safe and IUP is not thread safe. The general 
recommendation when you want more than one thread is to build the application 
and the user interface in the main thread, and create secondary threads that 
communicates with the main thread to update the interface. The secondary 
threads should not directly update the interface.

Best,Ranier Vilela



> From: [email protected]

> To: [email protected]

> Date: Thu, 1 Oct 2015 23:39:24 -0700

> Subject: Re: [Iup-users] Is Iup pthread safe?

>

> Hi Andy,

>

> IUP isn't thread safe by default but that doesn't mean it can't be done.

> Here is an example in Script BASIC (Windows & Linux)

>

> http://www.scriptbasic.org/forum/index.php/topic,335.0.html

>

> John

>

>

> On Fri, 2015-10-02 at 14:36 +1000, Andy Xiyue wrote:

> > Hi Scuri,

> >

> >

> > Recently I tried to use IUP with more than one thread. My plan is

> > simple, run IupMainLoop() in one thread and feed progress bar or text

> > control in another thread. Theoretically I don't need to synchronize

> > the IUP calls because the IupMainLoop() will process the events sooner

> > or later. However I met a lot of problems. Sometimes the client area

> > became invalided without refresh. Sometimes I got a core dump

> > triggered by X11 event. For example, the attached file was simplified

> > from my program. When the progress bar running, if you select text in

> > the text control, the app will received sig 11:

> >

> > iqiup: Fatal IO error 11 (Resource temporarily unavailable) on X

> > server :0.0.

> >

> >

> > It looks like I misunderstood the programming model of IUP. Is IUP

> > safe to update the attribution of controls in different thread? If

> > it's not, how can I manually send events to the main loop to update

> > the controls?

> >

> >

> > Kind regards

> >

> > Andy

> >

> > ------------------------------------------------------------------------------

> > _______________________________________________

> > Iup-users mailing list

> > [email protected]

> > https://lists.sourceforge.net/lists/listinfo/iup-users

>

>

>

> ------------------------------------------------------------------------------

> _______________________________________________

> Iup-users mailing list

> [email protected]

> https://lists.sourceforge.net/lists/listinfo/iup-users



-------------- next part --------------

An HTML attachment was scrubbed...



------------------------------



Message: 3

Date: Tue, 6 Oct 2015 15:54:51 +1100

From: Andy Xiyue <[email protected]>

Subject: Re: [Iup-users] Is Iup pthread safe?

To: [email protected]

Message-ID:

        <cafpcpfoggrkdhtvjjay5znapyt_ci+p-+wqnfjjqw393vsr...@mail.gmail.com>

Content-Type: text/plain; charset="utf-8"



Thanks John and Ranier.



At least I'm confirmed now I can not update the attributions of IUP

controls in other threads so my previous programming module was definitely

wrong.



So the question becomes how to send the control update event to the main

thread?



It's quite obvious the main thread is stuck in IupMainLoop(). Most events

can be processed in this main thread, like buttons, text, etc. When users

click the button, or inside the text input entry, the IUP generates the

event and it will be processed in IupMainLoop(). However, how an external

thread send the event into the main thread? I can't use message queue or

semaphore because IupMainLoop() takes all the control. Are there some

functions used for inserting IUP events?



Kind regards

Andy

-------------- next part --------------

An HTML attachment was scrubbed...



------------------------------



Message: 4

Date: Mon, 5 Oct 2015 22:01:48 -0700

From: Milind Gupta <[email protected]>

Subject: Re: [Iup-users] Is Iup pthread safe?

To: "IUP discussion list." <[email protected]>

Message-ID:

        <caojr7arwlukyrqrc5l1krbqj8ayon3iqoerurxcufrv86hx...@mail.gmail.com>

Content-Type: text/plain; charset="utf-8"



What I did was to have a timer run and listen to communication from another

thread. I used sockets to send and receive data.



Milind





On Mon, Oct 5, 2015 at 9:54 PM, Andy Xiyue <[email protected]> wrote:



> Thanks John and Ranier.

>

> At least I'm confirmed now I can not update the attributions of IUP

> controls in other threads so my previous programming module was definitely

> wrong.

>

> So the question becomes how to send the control update event to the main

> thread?

>

> It's quite obvious the main thread is stuck in IupMainLoop(). Most events

> can be processed in this main thread, like buttons, text, etc. When users

> click the button, or inside the text input entry, the IUP generates the

> event and it will be processed in IupMainLoop(). However, how an external

> thread send the event into the main thread? I can't use message queue or

> semaphore because IupMainLoop() takes all the control. Are there some

> functions used for inserting IUP events?

>

> Kind regards

> Andy

>

>

> ------------------------------------------------------------------------------

>

> _______________________________________________

> Iup-users mailing list

> [email protected]

> https://lists.sourceforge.net/lists/listinfo/iup-users

>

>

-------------- next part --------------

An HTML attachment was scrubbed...



------------------------------



Message: 5

Date: Mon, 05 Oct 2015 22:17:15 -0700

From: John Spikowski <[email protected]>

Subject: Re: [Iup-users] Is Iup pthread safe?

To: "IUP discussion list." <[email protected]>

Message-ID: <1444108635.2309.11.camel@laptop>

Content-Type: text/plain; charset="UTF-8"



Andy,



I feel if you follow what I have done in Script BASIC for threaded IUP

it should work for you without any changes to anything.



John



On Tue, 2015-10-06 at 15:54 +1100, Andy Xiyue wrote:

> Thanks John and Ranier.

>

>

> At least I'm confirmed now I can not update the attributions of IUP

> controls in other threads so my previous programming module was

> definitely wrong.

>

> So the question becomes how to send the control update event to the

> main thread?

>

>

> It's quite obvious the main thread is stuck in IupMainLoop(). Most

> events can be processed in this main thread, like buttons, text, etc.

> When users click the button, or inside the text input entry, the IUP

> generates the event and it will be processed in IupMainLoop().

> However, how an external thread send the event into the main thread? I

> can't use message queue or semaphore because IupMainLoop() takes all

> the control. Are there some functions used for inserting IUP events?

>

>

> Kind regards

>

> Andy

>

> ------------------------------------------------------------------------------

> _______________________________________________

> Iup-users mailing list

> [email protected]

> https://lists.sourceforge.net/lists/listinfo/iup-users











------------------------------



Message: 6

Date: Tue, 6 Oct 2015 10:25:10 +0000

From: Ranier VF <[email protected]>

Subject: Re: [Iup-users] Is Iup pthread safe?

To: IUP discussion list. <[email protected]>

Message-ID: <[email protected]>

Content-Type: text/plain; charset="iso-8859-1"



Hi,Well, your implementation must be:one consumer (GUI thread)many producers 
(GUI events)

You can use mutex-condition pair (classic), sockets or a new way pipes.

Best,Ranier Vilela



> From: [email protected]

> To: [email protected]

> Date: Mon, 5 Oct 2015 22:17:15 -0700

> Subject: Re: [Iup-users] Is Iup pthread safe?

>

> Andy,

>

> I feel if you follow what I have done in Script BASIC for threaded IUP

> it should work for you without any changes to anything.

>

> John

>

> On Tue, 2015-10-06 at 15:54 +1100, Andy Xiyue wrote:

> > Thanks John and Ranier.

> >

> >

> > At least I'm confirmed now I can not update the attributions of IUP

> > controls in other threads so my previous programming module was

> > definitely wrong.

> >

> > So the question becomes how to send the control update event to the

> > main thread?

> >

> >

> > It's quite obvious the main thread is stuck in IupMainLoop(). Most

> > events can be processed in this main thread, like buttons, text, etc.

> > When users click the button, or inside the text input entry, the IUP

> > generates the event and it will be processed in IupMainLoop().

> > However, how an external thread send the event into the main thread? I

> > can't use message queue or semaphore because IupMainLoop() takes all

> > the control. Are there some functions used for inserting IUP events?

> >

> >

> > Kind regards

> >

> > Andy

> >

> > ------------------------------------------------------------------------------

> > _______________________________________________

> > Iup-users mailing list

> > [email protected]

> > https://lists.sourceforge.net/lists/listinfo/iup-users

>

>

>

> ------------------------------------------------------------------------------

> _______________________________________________

> Iup-users mailing list

> [email protected]

> https://lists.sourceforge.net/lists/listinfo/iup-users



-------------- next part --------------

An HTML attachment was scrubbed...



------------------------------



------------------------------------------------------------------------------





------------------------------



_______________________________________________

Iup-users mailing list

[email protected]

https://lists.sourceforge.net/lists/listinfo/iup-users





End of Iup-users Digest, Vol 77, Issue 2

****************************************




------------------------------------------------------------------------------

Full-scale, agent-less Infrastructure Monitoring from a single dashboard

Integrate with 40+ ManageEngine ITSM Solutions for complete visibility

Physical-Virtual-Cloud Infrastructure monitoring from one console

Real user monitoring with APM Insights and performance trend reports

Learn More http://pubads.g.doubleclick.net/gampad/clk?id=247754911&iu=/4140
_______________________________________________

Iup-users mailing list

[email protected]

https://lists.sourceforge.net/lists/listinfo/iup-users





------------------------------------------------------------------------------
Full-scale, agent-less Infrastructure Monitoring from a single dashboard
Integrate with 40+ ManageEngine ITSM Solutions for complete visibility
Physical-Virtual-Cloud Infrastructure monitoring from one console
Real user monitoring with APM Insights and performance trend reports 
Learn More http://pubads.g.doubleclick.net/gampad/clk?id=247754911&iu=/4140
_______________________________________________
Iup-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iup-users                          
          
------------------------------------------------------------------------------
Full-scale, agent-less Infrastructure Monitoring from a single dashboard
Integrate with 40+ ManageEngine ITSM Solutions for complete visibility
Physical-Virtual-Cloud Infrastructure monitoring from one console
Real user monitoring with APM Insights and performance trend reports 
Learn More http://pubads.g.doubleclick.net/gampad/clk?id=247754911&iu=/4140
_______________________________________________
Iup-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to