Sean Kelly, el 1 de noviembre a las 12:23 me escribiste: > I've thought about doing this before, but I haven't come up with a clean > way to do it yet. The problem with simply throwing an exception is that > this would only work in the main thread. To allow other threads to
Yes, I completely ignored MT programs because in that case is usually a little more tricky to stop everithing in a general way. When you have MT you're probably stucked with manual termination. > terminate the process you'd have to forcibly terminate other threads, > and then running dtors would result in undefined behavior. I'd > considered sending signals to all threads and having them all throw > exceptions, but it's illegal to throw an exception from a signal hander, > and Windows has poor signal support anyway. Sadly, I don't know of > a better solution than simply calling exit() right now. I guess something can be hacked using pthread_cancel + pthread_cleanup, but even if this would be possible I think it's too much complexity for too little gain (and again, I don't know if Windows as a similar mechanism). Anyway, I think the common case for a clean exit() are small script-ish programs (I came up with this problem porting a small Python script to D), not big multi-threaded applications. Maybe we can have a simple limited solution: just add this check to the exit() function in my patch: assert (!thread_needLock()); or something similar that can tell us if there are any other threads running. -- Leandro Lucarella (AKA luca) http://llucax.com.ar/ ---------------------------------------------------------------------- GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05) ---------------------------------------------------------------------- SATANAS EN COMISARIA -- Crónica TV
