Dne 27.3.2013 18:51, Tim napsal(a):
That works as expected, except the fact that pressing CTRL+C which stops
the while(!stopServer) doesn't terminate the mainloop in my
Connection-class (run()-method). This thread is blocked because of the
receive()-method... but how can I force this thread to exit? Is there
any chance to do that? I already tried to set the accepted socket to
blocking(false) without any success...
Thanks in advance for any reply!
Hi Tim,
you have to pass the termination information to the thread. It does not
know about it and waits for receive() to return.
You will have to employ the select() call to some extent.
1) You can have some form of global variable that indicates termination
or you can send the termination info using Tid.send(). The code can then
look like this:
threadSocket.blocking(false);
auto ss = new SocketSet();
while (!shouldEnd)
{
ss.reset();
ss.add(threadSocket);
auto rc = Socket.select(ss, null, null, dur!"msecs"(timeout));
if (rc == 1)
{
// process your data
}
}
And it would take at most timeout miliseconds for thread to react to
termination message.
2) Use what Sean Kelly wrote. Either using a pipe or socketpair.
Martin