Zitat von Michael Van Canneyt <[EMAIL PROTECTED]>: > > > On Thu, 11 Dec 2008, Mattias Gärtner wrote: > > > Zitat von Florian Klaempfl <[EMAIL PROTECTED]>: > > > > > Mattias Gärtner schrieb: > > > > I'm writing a unit to simplify parallel methods/procedures. > > > > > > > > For example: > > > > DoParallel(@AMethod,StartIndex,EndIndex,Data); > > > > > > > > The AMethod is executed with several threads in parallel. > > > > > > > > What should happen when an exception occurs? > > > > It would be nice if the exception can be transfered to the main thread. > > > > Is this possible? How? > > > > > > See synchronize/checksynchronize implementation. > > > > Sorry, I misused the term 'main thread'. > > > > DoParallel starts AMethod with several threads in parallel and waits until > all > > threads finished. DoParallel can be called by any thread (e.g. the main > thread > > of the process *or* any other sub thread). Even the threads of the pool can > > call again DoParallel. This is only limited by the memory, as each call > creates > > a threadgroup object. > > > > The goal is to simplify parallelizing procedures so for the user DoParallel > > should work like a normal procedure call. > > That's why it would be nice if the following could work: > > > > try > > ... > > DoParallel(...); > > ... > > except > > end; > > > > The exception can occur in any of the subthreads including the starting > thread > > (which I named 'main thread', because it is the main thread of the group. > Maybe > > I should call it 'group thread' or 'starter thread'). > > > > When an exception occurs, the group waits for all other threads of this > group to > > finish and then the exception should happen 'as if the exception occured in > the > > starting thread'. > > The way I uderstand threads this can never work, because then there should > be a synchronization wait loop after the doparallel. Without the wait loop > it'll never work, because where (at which statement) should the exception be > raised ?
It should be raised in the starter thread. The question is how to - stop an exception in a thread (try..except) - give it to another thread - the starter thread (giving the object is easy, but ...) - continue the helper thread (this will normally free the exception object, I need a way to avoid this automatism) - raise the exception in the starter thread (raise FetchedException). > To make it operable, the thread should catch the exception, and then do a > synchronize with a procedure that raises the exception, so that when > synchronize is called, the exception is raised. I don't see how this is possible. Mattias _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel