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.urba...@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@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> >>> ______________________________________________ >>> R-devel@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> >>> >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel