[comp.windows.x.motif] delay loop

pasturel@sctc.com (Pierre Pasturel) (12/14/90)

  I want to use XtAddTimeOut to cause a delay X in msec in a callback by
doing this:

/*** in callback 

    timer_id = XtAddTimeOut(X,delay_done,NULL);

    while ( done == FALSE ) {

    }

    /* rest of processing in callback */

 *** end of callback  ***/


void delay_done(caddr_t client) 
{

    done = TRUE;
    
    
}

where delay_done is the processing procedure which will set the done flag
to TRUE when X msecs have expired. The problem is, the while loop
sits in a tight loop forever and the Time Out never occurs.

Do you know what I can do? I want to set it up so that processing occurs
AFTER the while loop, not in delay_done.

Thanks for any help

Pierre
pasturel@sctc.com


p.s. I tried using setjmp and longjmp, but I would rather stay away from
     those.

rowan@ima.isc.com (Rowan Hawthorne) (12/14/90)

In article <1990Dec13.170905.21902@sctc.com>, pasturel@sctc.com (Pierre Pasturel) writes:
|> 
|>   I want to use XtAddTimeOut to cause a delay X in msec in a callback by
|> doing this:
|> 
|>     timer_id = XtAddTimeOut(X,delay_done,NULL);
|> 
|>     while ( done == FALSE ) {
|>     }
|> 
|> where delay_done is the processing procedure which will set the done flag
|> to TRUE when X msecs have expired. The problem is, the while loop
|> sits in a tight loop forever and the Time Out never occurs.

How about calling XtNextEvent and XtProcessEvent in that loop, instead
of having a tight loop?

		Rowan

Email	rowan@ima.isc.com	
Phone	617-661-7474 x206	
Fax	617-661-2070
upstream from the last bend in the Charles River

pasturel@sctc.com (Pierre Pasturel) (12/15/90)

rowan@ima.isc.com (Rowan Hawthorne) writes:

>In article <1990Dec13.170905.21902@sctc.com>, pasturel@sctc.com (Pierre Pasturel) writes:
>|> 
>|>   I want to use XtAddTimeOut to cause a delay X in msec in a callback by
>|> doing this:
>|> 
>|>     timer_id = XtAddTimeOut(X,delay_done,NULL);
>|> 
>|>     while ( done == FALSE ) {
>|>     }
>|> 
>|> where delay_done is the processing procedure which will set the done flag
>|> to TRUE when X msecs have expired. The problem is, the while loop
>|> sits in a tight loop forever and the Time Out never occurs.

>How about calling XtNextEvent and XtProcessEvent in that loop, instead
>of having a tight loop?

>		Rowan


I am no X event expert (actually, I just use XtMainLoop to do the processing
for me), but I was reading a little about events and it would appear that 
it might get tricky if I have a XtMainLoop() in main() and another
event loop in a callback waiting for a timer event.

Does anyone out there know a clean solution to this where I can keep
my XtMainLoop in main()  but block waiting in a callback waiting for the
event that will be caused by XtAddTimeOut and then continue executing at the 
point where I blocked waiting on the timer event in the callback??  

A sample of code would help.

Thanks,

Pierre
pasturel@sctc.com