[Rd] Problem with initializiing R main loop under Windows (R.dll-version: 2.15.1)
Peter Vorpahl
peter.vorpahl at uni-potsdam.de
Tue Aug 21 01:10:25 CEST 2012
Dear R-developers,
even though I may not be the first one to encounter the problem
described below, I would really appreciate some help or a link to a
forum where this topic is being discussed. Probably I am simply
misinformed on the usage of structRstart but see for youselve.
I did check multiple forums and the whole internet on the topic without
success.
I am using the shared library version of R under Windows and my
application is intended to provide a two-way interaction with R.
The code snippet, I use to initialize and start the repl is:
void RServer::run()
{
// If we have no GUI frontend running, don't init the R-server
if (!connectToGui()) return;
// set the start time
R_setStartTime();
// Definel callback handler struct
structRstart RParams;
R_DefParams (&RParams);
RParams.R_Quiet = FALSE; //
RParams.R_Interactive = TRUE;
RParams.R_Verbose = FALSE;
RParams.R_Slave = FALSE;
RParams.RestoreAction = SA_RESTORE;
RParams.SaveAction = SA_NOSAVE;
RParams.rhome = get_R_HOME ();
RParams.home = getRUser ();
RParams.CharacterMode = LinkDLL; // RGui;
RParams.ShowMessage = RShowMessage;
RParams.ReadConsole = RReadConsoleWin;
RParams.WriteConsoleEx = RWriteConsoleEx;
RParams.WriteConsole = 0;
RParams.CallBack = RDoProcessEvents;
RParams.YesNoCancel = RAskYesNoCancel;
RParams.Busy = RBusy;
// Install own handlers
R_SetParams(&RParams);
// flush the console input buffer
// call to WINAPI: clears all that's in stdin
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
// Fake a command line
int argc = 2;
char* argv[2] = { qstrdup ("--no-save"), qstrdup
("--no-restore") };
// redirect the BREAK signal to own handler
signal(SIGBREAK, pi_onintr);
// set the arguments in R
R_set_command_line_arguments (argc, argv);
// Here, the main initialization of R is performed
setup_Rmainloop ();
// Init the IO buffer and the global context
R_ReplDLLinit();
// if I use the following instead, no problem occurs on error
in evaluation:
// run_Rmainloop ();
while ((_state== Connected || _state == Running) &&
R_ReplDLLdo1() > 0) {
Pi::msleep(5); // to keep the processor cool
};
// Usually we don't get here on q()
R_RunExitFinalizers();
Rf_KillAllDevices();
}
This, however is mostly adapted from 'writing R extensions'.
Nonetheless, this way I receive an abnormal program termination whenever
an error occurs in the evaluation of code returned from
'RReadConsoleWin'. I'm pretty sure that there is no problem in my code,
since, if I use 'run_Rmainloop ()' instead, everyting works fine but I
have no control on the exit of the program. This implies that my program
would not be able to do proper clean up at end.
I would really appreciate some help here.
Yours sincerely,
Peter
--
Institute of Earth and Environmental Sciences, University of Potsdam
Karl-Liebknecht-Str. 24/25 (House 12), 14476 Potsdam, Germany
office: +49 331 977 2469
mobile: +49 173 3732867
e-mail: peter.vorpahl at uni-potsdam.de
More information about the R-devel
mailing list