मैंने एक समस्या में भाग लिया है जहां मैं ऐप को लटकने के बिना अपने प्रोग्राम में मैनेशिया नहीं रोक सकता।प्रोग्राम के भीतर से मिनेसिया बंद होने पर एरलांग ऐप को रोकना
मैं वर्तमान में अपने erlang ऐप के भीतर मैनेशिया के प्रोटोटाइप कर रहा हूँ।
मेरी jaus_app.erl शुरू फ़ाइल() में कॉल:
{atomic, ok} = mnesia:load_textfile("priv/mnesia_prototype.txt")
मेरे स्टॉप() फ़ंक्शन को कॉल:
mnesia:dump_to_textfile("priv/mnesia_prototype_res.txt"),
mnesia:stop(),
जब मैं इन पंक्तियों के बाहर टिप्पणी और शुरू करने और से mnesia रोक erlang संकेत, मैं अपने आवेदन को साफ करने में सक्षम हूँ।
क्या मुझे इन प्रोटोटाइप कार्यों को पूरी तरह से विकसित एरलांग ऐप के भीतर उपयोग नहीं करना चाहिए?
केन।
ऐसा इसलिए होता है क्योंकि आपका 'स्टॉप' फ़ंक्शन एप्लिकेशन नियंत्रक से कहा जाता है, जो 'gen_server' है, लेकिन' मैनेशिया: स्टॉप 'कॉल' एप्लिकेशन: रोकें (मैनेशिया) 'और एप्लिकेशन नियंत्रक से प्रतिक्रिया के लिए प्रतीक्षा करता है - और आपके पास डेडलॉक है। तो, सरल जवाब है "उस कॉलबैक फ़ंक्शन में 'मिनेसिया: स्टॉप' का उपयोग न करें"; मेरे पास एक बेहतर सुझाव नहीं है, हालांकि :) – legoscia