From schattenpflanze at arcor.de  Mon Apr 25 11:22:15 2011
From: schattenpflanze at arcor.de (schattenpflanze at arcor.de)
Date: Mon, 25 Apr 2011 11:22:15 +0200
Subject: [Rd] Interrupting C++ code execution
Message-ID: <4DB53D47.7060903@arcor.de>

Hello,

I am writing an R interface for one of my C++ programs. The computations 
in C++ are very time consuming (several hours), so the user needs to be 
able to interrupt them. Currently, the only way I found to do so is 
calling R_CheckUserInterrupt() frequently. Unfortunately, there are 
several problems with that:

1. Calling R_CheckUserInterrupt() interrupts immediately, so I have no 
possibility to exit my code gracefully. In particular, I suppose that 
objects created on the heap (e.g., STL containers) are not destructed 
properly.

2. Calling R_CheckUserInterrupt() within a parallel OpenMP loop causes 
memory corruptions. Even if I do so within a critical section, it 
usually results in segfaults, crashes, or invalid variable contents 
afterwards. I suppose this is due to the threads not being destroyed 
properly. Since most of the time critical computations are done in 
parallel, this means I can hardly interrupt anything.

Having a function similar to R_CheckUserInterrupt() but returning a 
boolean variable (has an interrupt occurred or not?) would solve these 
problems. Is there a way to find out about user interrupt requests (the 
user pressing ctrl+c or maybe a different set of keys) without 
interrupting immediately?

I would appreciate your advice on this topic.


Best regards,
Peter



[Rd] Interrupting C++ code execution
schattenpflanze at arcor.de