www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - How to force a thread to unwind it's stack?

reply Sascha Katzner <sorry.no spam.invalid> writes:
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

Why is there no way in D to force a thread to unwind it's stack, for 
example by sending it an exception like you do in Java with 
"Thread.interrupt()"?

Suppose you have an application which has a thread that has some 
important resources which need to be released before the application can 
quit and this thread is currently busy with something which is out of 
your sphere of influence (like waiting for a network packet or 
something), so that in the foreseeable future it can't look for a flag 
of the main thread to quit and release it's resources. How do you force 
this thread to terminate without compromising the resources it holds or 
having to release the resources manually in the main thread?

Here is an example of how D could implement this stack unwinding:
"http://www.woodmann.com/crackz/Tutorials/Seh.htm#Exception handling in 
multi-threaded applications" (8th point)

LLAP,
Sascha
Aug 27 2008
next sibling parent davidl <davidl 126.com> writes:
在 Wed, 27 Aug 2008 23:04:34 +0800,Sascha Katzner <sorry.no spam.invalid>  
写道:

 Why is there no way in D to force a thread to unwind it's stack, for
 example by sending it an exception like you do in Java with
 "Thread.interrupt()"?

 Suppose you have an application which has a thread that has some
 important resources which need to be released before the application can
 quit and this thread is currently busy with something which is out of
 your sphere of influence (like waiting for a network packet or
 something), so that in the foreseeable future it can't look for a flag
 of the main thread to quit and release it's resources. How do you force
 this thread to terminate without compromising the resources it holds or
 having to release the resources manually in the main thread?

 Here is an example of how D could implement this stack unwinding:
 "http://www.woodmann.com/crackz/Tutorials/Seh.htm#Exception handling in
 multi-threaded applications" (8th point)

 LLAP,
 Sascha

Honestly, i didn't get the exception idea at the very first glance. Yeah, it's a great idea!! And it SHOULD be in STDLIB -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/
Aug 27 2008
prev sibling parent reply Frank Benoit <keinfarbton googlemail.com> writes:
Sascha Katzner schrieb:
 Why is there no way in D to force a thread to unwind it's stack, for
 example by sending it an exception like you do in Java with
 "Thread.interrupt()"?
 
 Suppose you have an application which has a thread that has some
 important resources which need to be released before the application can
 quit and this thread is currently busy with something which is out of
 your sphere of influence (like waiting for a network packet or
 something), so that in the foreseeable future it can't look for a flag
 of the main thread to quit and release it's resources. How do you force
 this thread to terminate without compromising the resources it holds or
 having to release the resources manually in the main thread?
 
 Here is an example of how D could implement this stack unwinding:
 "http://www.woodmann.com/crackz/Tutorials/Seh.htm#Exception handling in
 multi-threaded applications" (8th point)
 
 LLAP,
 Sascha
 

a tango ticket related to this: http://dsource.org/projects/tango/ticket/1009
Aug 27 2008
parent davidl <davidl 126.com> writes:
在 Thu, 28 Aug 2008 08:09:06 +0800,Frank Benoit  
<keinfarbton googlemail.com> 写道:

 Sascha Katzner schrieb:
 Why is there no way in D to force a thread to unwind it's stack, for
 example by sending it an exception like you do in Java with
 "Thread.interrupt()"?

 Suppose you have an application which has a thread that has some
 important resources which need to be released before the application can
 quit and this thread is currently busy with something which is out of
 your sphere of influence (like waiting for a network packet or
 something), so that in the foreseeable future it can't look for a flag
 of the main thread to quit and release it's resources. How do you force
 this thread to terminate without compromising the resources it holds or
 having to release the resources manually in the main thread?

 Here is an example of how D could implement this stack unwinding:
 "http://www.woodmann.com/crackz/Tutorials/Seh.htm#Exception handling in
 multi-threaded applications" (8th point)

 LLAP,
 Sascha

a tango ticket related to this: http://dsource.org/projects/tango/ticket/1009

It's pity that modern OS not get this useful API built-in. That's design flaw clearly. I'm pretty sure future GOOD OS will get this API integrated if the designers are not idiots. As soon as OS designers realize how useful it is, they will get it done. But I doubt it's really a tough thing to implement with support from OS. especially on windows. the possible user-mode implementation i can think of firstly stop the thread, then write throw exception code to EIP, then resume the thread. yet it's not a clean solution. or even with such thing, the application might still hang becuase the thread might stop at a WaitForSingleObject or WaitForMultipleObject. So that's why I say it should be built-in the OS. -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/
Aug 27 2008