V Fri, 05 Feb 2016 03:47:40 +0000 tcak via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> napsáno:
> On Thursday, 4 February 2016 at 22:27:31 UTC, Ali Çehreli wrote: > > On 02/04/2016 12:25 PM, tcak wrote: > > > > > void threadFunc(){ > > > scope(exit){ > > > writeln("Leaving 2: ", stopRequested); > > > } > > > > > > > > > while( !stopRequested ){ > > > /* THERE IS NO "RETURN" HERE AT ALL */ > > > } > > > > > > writeln("Leaving 1: ", stopRequested); > > > } > > > > > > > > > > > > While loop is running, suddenly "Leaving 2: false" is seen. > > > > That would happen when there is an exception. > > > > > Checked with > > > exception, but there is nothing. > > > > If a thread is terminated with an exception, its stack is > > unwound and unlike the main thread, the program will not > > terminate. I think this is due to an exception. > > > > > GDB doesn't show any error. > > > > I think putting a break point at exception construction would > > be helpful but it will be simpler to put a try-catch block that > > covers the entire body of threadFunc(). > > > > > There is no > > > "Leaving 1: .." message at all. > > > > > > Is there any known reason for a thread to suddenly stop like > > this? > > > > I am still betting on an exception. :) > > > > Ali > > Yup, it is exception it seems like, but with a weird result. > Check the new codes: > > void threadFunc(){ > scope(exit){ > writeln("Leaving 2: ", stopRequested); > } > > scope(failure){ > writeln("Failure"); > } > > try{ > while( !stopRequested ){ > > } > > writeln("Leaving 1: ", stopRequested); > } > catch( Exception ex ){ > writeln("Caught the exception"); > } > } > > Now, the thread stops with: > > Failure > Leaving 2: false > > > There is no "Caught the exception". And believe me other then the > codes inside while loop, main structure as seen in the above code. > > By testing many times, I understood that the problem occurs when > too many requests are received suddenly (by pressing F5 many > times again and again produces the exception). > > But the question is why try-catch is not able to catch it, and > just scope(failure) can? Did you try catch Throwable instead of Exception?