Showing results for 
Search instead for 
Did you mean: 

Installing an SEH (structured exception handler) in every thread

Hi all,

I tried to install my own handler for structured exceptions in every thread using the following code:

/// Translates strucutred exceptions to C++ exceptions
void structuredExceptionTranslator(unsigned int code, _EXCEPTION_POINTERS *ep)/// Translates strucutred exceptions to C++ exceptions by throwing a
void structuredExceptionTranslator(unsigned int code, _EXCEPTION_POINTERS *ep)
  throw std::exception();

/// Installs a handler for structured exceptions in every thread.
class StructuredExceptionHandlerInstaller : public tbb::task_scheduler_observer
  void on_scheduler_entry(bool is_worker)
    if (is_worker)

/// main program
int main(int argc, char *argv[])
  // set translator function in order to translate strucutred exceptions to C++ exceptions
  StructuredExceptionHandlerInstaller g_SEHHandler;

  // execute the main program in a guarded section in order to catch all exceptions and log them before exiting
    // do stuff, including using tbb::parallel_for
    return EXIT_SUCCESS;
  catch (...)
    // log the exception
    // return a failure code
    return EXIT_FAILURE;

However, some structured exceptions originating from inside parallel_for loops are still not handled by my custom SEH. This seems to be the case whenever I generate a parallel_for loop with more iterations than CPUs and with the context tbb::task_group_context(tbb::task_group_context::isolated) given to parallel_for. I am guessing that my handler does not get installed for all threads but I have no clue why that could be the case.

On the other hand, even if my SEH is called, it sometimes ends up failing an assertion:

Assertion p >= 0 && p < num_priority_levels failed on line 103 of file z:\itt\branch_tbb41\tbb\1.0\s

I found the related piece of code online:
inline void assert_priority_valid ( intptr_t& p ) {    __TBB_ASSERT_EX( p >= 0 && p < num_priority_levels, NULL );}
But again, I have no idea as to why this happens.

I'd be greatful to any hints, esp. since I am a novice w.r.t. TBB.


0 Kudos
1 Reply

I have devised a more simple and self contained example and posted it here:

The issue I have is that I do not deterministically get the output "seh exception caught". Sometimes the program simply crashes without catching any exceptions, i.e. I experience the old school behavior for SEH exceptions.

I tested with Visual Studio 2012, VC11 Update 3 and TBB 4.1 Update 3 (and 4, also the commercial version). The compiler switch /EHa is enabled and I am working with 64bit executables.

Any suggestions what I might be doing wrong would be highly welcome.

Regards, Hauke

p.s. The last post has been submitted by a colleague of mine with my consent and I hope that we did not violate any forum rules.