>     1. Suspend the Thread: SuspendThread ();
>     2. get the thread context: GetThreadContext();
>     3. modify the IP in the context, we can also store argumnets we
>        want to pass in the context (in other registers). 
>     4. set the thread context: SetThreadContext();
>     5. resume the thread: ResumeThread();


One thing.
If thread to be aborted is currently asleep or is waiting, then it's not possible
to interrupt it this way - it will continue to wait after 
SetThreadContext/ResumeThread.
One possible solution is to use alertable APIs, such as SleepEx to implement 
Thread::Sleep().
Then use asynchronous notifications to ensure interruption.

Like this:
    SetThreadContext(hThread, &new_ctx);
    QueueUserAPC(empty_function, hThread, NULL);
    ResumeThread(hThread);


Sergey





_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to