V Fri, 05 Feb 2016 05:48:27 +0000 tcak via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> napsáno:
> On Friday, 5 February 2016 at 03:47:40 UTC, tcak wrote: > > On Thursday, 4 February 2016 at 22:27:31 UTC, Ali Çehreli wrote: > >> On 02/04/2016 12:25 PM, tcak wrote: > >> > >> > [...] > >> > >> That would happen when there is an exception. > >> > >> > [...] > >> > >> 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. > >> > >> > [...] > >> > >> 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(). > >> > >> > [...] > >> 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? > > Okay. The cause of problem has been solved with good-old > writeln("DEBUG"); method :) > > Cause is trying to access outside of array (e.g. array[$]). But I > didn't like that fact that scope(failure) is called for that > properly, but no other error was seen. > > Environment: MonoDevelop, Linux x64, DMD 2.070, MonoD, running in > Debug mode. This is wierd, IMHO it is a bug.