[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