[Rd] Plot window does not update in embedded code

Jan van der Laan djvanderlaan at gmail.com
Wed Jul 28 13:43:17 CEST 2010


Took a while to find enough time to have a good look at this, but I
have this working now. I am using the for-loop calling the handlers.
Using only R_CheckUserInterrupt() did not work. It was a bit of work
to track down all of the function declarations in R's source.

Thanks!

Regards,
Jan



On Thu, Jul 22, 2010 at 4:06 PM, Simon Urbanek
<simon.urbanek at r-project.org> wrote:
>
> 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