On 02/02/2023 7:24 p.m., Simon Urbanek wrote:
Duncan,

I don't know if it is best, but you can have a look at "background"[1] which is I believe 
what "later" was inspired by. It is a very minimal example so should give you ideas on 
how to do that in your package - it runs the R code on the main thread so it should be as close to 
safe as one can get with asynchronous calls, just beware of reentrance. In your case I suspect that 
you may already have an X11 fd that you can use in the unix handler - not sure what signaling you 
need on Windows, though.

Thanks. Yours appears to have the advantage of being able to run R code in the middle of a function call if that function calls R_ProcessEvents, as Sys.sleep() does. I wonder why "later" didn't support that?

What I was hoping for would be something like R_PolledEvents, but it should work on all systems, not just Unix-alikes. My goal is to simplify rgl. Part of this means I'd like to minimize the system dependence, since I no longer have easy access to a Windows machine for testing.

Duncan


Cheers,
Simon

[1] - https://github.com/s-u/background


On Feb 3, 2023, at 10:53 AM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote:

I'm updating low level stuff in the rgl package.  I'm exploring using the GLFW 
library to handle low level stuff instead of trying to do that myself.

Currently rgl has fairly ugly code to link into the R event loop.  (It needs to 
do this so that it hears about mouse movement, etc.)  I'm hoping that someone 
else has written better code than I could to do this.  Is there a currently 
recommended way to hook into the loop?

The kinds of things I need are getting events fairly frequently (e.g. 0.03 
second delay if things aren't too busy) for code that doesn't involve R at all.

I will also occasionally want to call back into R; I don't really mind if 
there's a bigger delay to wait for that to be safe.

I've seen the "later" package:  it looks as though it might do what I need, but 
the protection for R code seems to be all or nothing, i.e. if I want to evaluate an R 
expression nothing else can be running, or if I want action while R code is running, I 
can't involve R at all.

Duncan Murdoch

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel



______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to