/// <summary> /// Stops all the running channels for this kernel. /// This stops their event loops and joins their threads. /// </summary> public void StopChannels() { // Close down the threads polling for results if (StdInThread != null && StdInThread.IsAlive) { StdInThread.Interrupt(); } if (ShellThread != null && ShellThread.IsAlive) { ShellThread.Interrupt(); } if (IoPubThread != null && IoPubThread.IsAlive) { IoPubThread.Interrupt(); } // Stop all the channel sockets if (ShellChannel.IsAlive) { ShellChannel.Stop(); } if (IoPubChannel.IsAlive) { IoPubChannel.Stop(); } if (StdInChannel.IsAlive) { StdInChannel.Stop(); } if (HbChannel.IsAlive) { HbChannel.Stop(); } // Join any threads that existed if (StdInThread != null) { StdInThread.Join(); } if (ShellThread != null) { ShellThread.Join(); } if (IoPubThread != null) { IoPubThread.Join(); } // Clean up any threads StdInThread = null; ShellThread = null; IoPubThread = null; }