installHandler
की डॉक्स से:
हैंडलर स्थापित किया गया है जो एक नया सूत्र में कार्रवाई लागू करेगा जब (या कुछ ही समय बाद) संकेत प्राप्त होता है।
और exitWith:
नोट: GHC में, exitWith आदेश प्रक्रिया से बाहर निकलने के लिए मुख्य कार्यक्रम धागे से बुलाया जाना चाहिए। जब किसी अन्य धागे से बुलाया जाता है, तो बाहर निकलें एक एक्जिटएक्सप्शन सामान्य के रूप में फेंक देगा, लेकिन अपवाद प्रक्रिया को बाहर निकलने का कारण नहीं बनता है।
तो exitSuccess
हैंडलर प्रक्रिया समाप्त नहीं करता है, और इसकी उम्मीद है (हालांकि अप्रत्याशित;) व्यवहार।
आप तत्काल कार्रवाई चाहते हैं,
import System.Exit
import System.Posix.Signals
import Control.Concurrent
main :: IO()
main = do
tid <- myThreadId
installHandler keyboardSignal (Catch (killThread tid)) Nothing
threadDelay (1000000000)
सिग्नल प्राप्त करने के तुरंत बाद ही धागे को मारता है।
कम कठोर, यदि आप एक सफल बाहर निकलने चाहते हैं, हो सकता है
import System.Exit
import System.Posix.Signals
import Control.Concurrent
import qualified Control.Exception as E
main :: IO()
main = do
tid <- myThreadId
installHandler keyboardSignal (Catch (E.throwTo tid ExitSuccess)) Nothing
threadDelay (10000000)
मुझे लगता है कि यह भी मज़बूती से काम करेंगे, लेकिन मैं पूरी तरह यकीन नहीं है।
स्रोत
2012-11-18 16:15:44
लाइन 'थ्रेडडेले (10000000)' क्या करती है? – Langston
['थ्रेडडेले'] (http://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Concurrent.html#v:threadDelay)" किसी दिए गए संख्या के माइक्रोसॉन्ड के लिए मौजूदा धागे को निलंबित करता है " सी में 'usleep' के समान। यहां, हम उपयोगकर्ता को Ctrl-C दबाए रखने के लिए पर्याप्त समय देने के एकमात्र उद्देश्य के लिए निष्पादन को निलंबित करते हैं। –