[Rd] Plot window does not update in embedded code

Simon Urbanek simon.urbanek at r-project.org
Thu Jul 22 16:06:56 CEST 2010


On Jul 22, 2010, at 3:31 AM, Jan van der Laan wrote:

> Thomas, Simon,
> 
> Thank you for your answers. I will have a look at the code Thomas gave
> me and probably also have another look at src/unix/sys-std.c. I'll get
> back when I have this working, or, more likely, when I can't get this
> to work.
> 
> As for the example code. I know it is very fragile. I tried to make a
> minimal complete example that showed the problem without having to
> attach hundreds of lines of code that nobody will read. However, what
> parts are unix specific? Is it the int Rf_initialize_R and
> R_running_as_main_program? What non os specific options do I have?
> 

I was talking about the snippet Thomas sent - not your code - yours was nicely minimalistic. The issue with running the handlers by hand is that it's unix-only. But as I corrected in my second e-mail - it is the way to go right now since there is no alternative at the moment (again, you may get away with simply calling R_CheckUserInterrupt() but some devices may be using input handlers in which case it is not sufficient). The fact that you can check handlers manually is a good thing but it may be worth considering providing an API call like R_idle(int timeoutMillis) that does the job across all platforms.

Cheers,
Simon



> Again thank you for your answers.
> 
> Regards,
> 
> Jan
> 
> On Wed, Jul 21, 2010 at 10:52 PM, Simon Urbanek
> <simon.urbanek at r-project.org> wrote:
>> 
>> On Jul 21, 2010, at 4:28 PM, Simon Urbanek wrote:
>> 
>>> Use
>>> R_CheckUserInterrupt()
>>> 
>> 
>> Actually, the above is true but assumes that you're running R's REPL and not your own R_ReadConsole (it will work even in your ReadConsole but unix handlers are not run in that case so only some events will work).
>> 
>> 
>>> The code below is very fragile and unix-specific.
>>> 
>> 
>> That is true, too, but even after R_ProcessEvenrts refactorization the handlers are still-unix specific so I stand corrected and you still have to run handlers manually (note that you don't need PolledEvents anymore since they are part of the handlers).
>> 
>> Cheers,
>> Simon
>> 
>> 
>>>> 
>>>> On Wednesday 21 July 2010, Jan van der Laan wrote:
>>>>> How do I ensure that the windows keep being updated?
>>>> 
>>>> in RKWard we run the following periodically during idle phases:
>>>> 
>>>> 
>>>> // this basically copied from R's unix/sys-std.c (Rstd_ReadConsole)
>>>> #ifndef Q_WS_WIN
>>>>      for (;;) {
>>>>              fd_set *what;
>>>>              what = R_checkActivityEx(R_wait_usec > 0 ? R_wait_usec : 50, 1,
>>>> Rf_onintr);
>>>>              R_runHandlers(R_InputHandlers, what);
>>>>              if (what == NULL) break;
>>>>      }
>>>>      /* This seems to be needed to make Rcmdr react to events. Has this always
>>>> been the case? It was commented out for a long time, without anybody noticing.
>>>> */
>>>>      R_PolledEvents ();
>>>> #else
>>>>      R_ProcessEvents();
>>>> #endif
>>>> 
>>>> 
>>>> Regards
>>>> Thomas
>>>> ______________________________________________
>>>> R-devel at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>> 
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>> 
>>> 
>> 
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
> 
> 



More information about the R-devel mailing list