I am using ZThreads to illustrate the question but my question applies to PThreads, Boost Threads and other such threading libraries in C++.
class MyClass: public Runnable
{
public:
void run()
{
while(1)
{
}
}
}
I now launch this as follows:
MyClass *myClass = new MyClass();
Thread t1(myClass);
Is it now possible to kill (violently if necessary) this thread? I can do this for sure instead of the infinite loop I had a Thread::Sleep(100000)
that is, if it is blocking. But can I kill a spinning thread (doing computation). If yes, how? If not, why not?
As far as Windows goes (from MSDN):
Boost certainly doesn't have a thread-killing function.
As people already said, there is no portable way to kill a thread, and in some cases not possible at all. If you have control over the code (i.e. can modify it) one of the simplest ways is to have a boolean variable that the thread checks in regular intervals, and if set then terminate the thread as soon as possible.
Yes,
Define
keepAlive
variable as anint
. Initially set the value ofkeepAlive=1
.Now, when every you want to kill thread just set the value of
keepAlive=0
.Q. How this works ?
A. Thread will be live until the execution of the function continuous . So it's pretty simple to
Terminate
a function . set the value of variable to0
& it breaks which results in killing of thread . [This is the safest way I found till date
] .