From luke at stat.uiowa.edu  Sat May  5 01:35:20 2007
From: luke at stat.uiowa.edu (Luke Tierney)
Date: Fri, 4 May 2007 18:35:20 -0500 (CDT)
Subject: [Rd] sending signals to embedded R
In-Reply-To: <eb555e660705041534r32c2d62di7309b5a457456c7c@mail.gmail.com>
References: <eb555e660705041448h27679664o21522a5d04285d74@mail.gmail.com>
	<Pine.LNX.4.64.0705042309520.21366@gannet.stats.ox.ac.uk>
	<eb555e660705041534r32c2d62di7309b5a457456c7c@mail.gmail.com>
Message-ID: <Pine.LNX.4.64.0705041828340.32397@itasca2.wildberry.org>

On Fri, 4 May 2007, Deepayan Sarkar wrote:

> On 5/4/07, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
>> On Fri, 4 May 2007, Deepayan Sarkar wrote:
>>
>>> one thing I haven't been able to figure out from R-exts is how to
>>> interrupt a calculation running inside an embedded R. C code inside R
>>> calls R_CheckUserInterrupt() intermittently to check for interrupts,
>>> but how does my GUI tell R that the user wants it interrupted?
>>
>> Well, the intention is that you send an interrupt, which hardly needs to
>> be in the manual.
>
> I didn't mean to imply that it does. I'm just new to signals and
> things that should be obvious aren't.
>
> Basically kill(2) seems to be the right thing to use, but I wasn't
> sure what the PID needs to be. Turns out sending SIGINT to my GUI from
> a shell interrupts R, so raise(SIGINT) should be enough.

The tricky bit here is figuring out who does the sending.  It you have
a separate thread/process for the GUI and R then that is fine (though
may raise other issues).  If it is a single thread then you need your
event processing to get an occasional look in to recognise the user
action that triggers an interrupt. The Windows version handles this by
having R_CheckUserInterrupt() do a limited amount of event processing
(you need to be careful in GUI events have R actions associated with
them).  I believe the Mac version is similar though it has been a
while since I looked at that. I don't believe the unix version of
R_CheckUserInterrupt() does not provide hooks for installing such
checking (we have talked about this off an on but I don't believe
anything happened -- could be wrong there though).

If Qt allows this one option may be to have events on your nterrupt
widget managed by a small thread that does nothing other than send a
signal to the main thread if the widget is clicked.

Best,

luke

-- 
Luke Tierney
Chair, Statistics and Actuarial Science
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu



[Rd] sending signals to embedded R
Luke Tierney