Thursday 15 August 2013

multithreading - Keep Tread alive (pthread, c) -


मेरे पास निम्न स्थिति है:

एक फोरट्रान प्रोग्राम कॉल ( iso_c_binding ) एक फ़ंक्शन (सी में लिखा गया) जो कि pthread_create फ़ंक्शन के माध्यम से एक सर्वर (सॉकेट फ़ंक्शन) प्रारंभ करता है जब तक कि एक निश्चित वैरिएबल को 1 पर सेट नहीं किया जाता है, तब तक यह सर्वर चलते रहने के लिए (कनेक्शन की प्रतीक्षा कर रहा है) माना जाता है मेरे पास समस्या यह है कि जैसे ही फ़ंक्शन जो कि सर्वर रिटर्न (फोरट्रान प्रोग्राम) को शुरू करता है, सर्वर थ्रेड निकास हो जाता है मुझे यकीन नहीं है कि कैसे स्थिति को संभालना है (जब तक सर्वर को बंद करने तक सिग्नल नहीं चलने के लिए गर्तिका चलती है)।

तरह का संबंध

(कोड जोड़ा गया)

फ़ॉरेन रन_सर्वर (सर्वरआरंस) बाइंड (सी, नाम = 'रन_सरवेर') iso_c_binding आयात :: c_int integer (kind = c_int) :: run_server integer (kind = C_int), value :: serverRuns END फ़ंक्शन रन_सर्वर ... fserver = run_server (ServerRuns) ...

सी रन सर्वर कोड

  int run_server ( Int cservrun) {int err; Pthread_t tid [1]; Int i = 0; अगर (cservrun! = 0) {printf ("[त्रुटि] प्रक्रिया पहले से ही चल रही है। \ N"); वापसी -1; } और {err = pthread_create (& amp; (टीआईडी ​​[0]), नल, (शून्य *) और सर्वर, नल); If (err! = 0) {printf ("[error] नहीं बना सकता है \" server \ "thread"); वापसी -1; } अन्य {printf ("सर्वर चल रहा है \ n"); वापसी 0; }}}   

सी सर्वर कोड

  पूर्णांक सर्वर (शून्य) {... stop_serv = 0; जबकि (stop_serv == 0) {printf ("सर्वर लूप \ n"); न्यूज़ॉकफ़्ड = स्वीकार्य (सॉकफाड, (स्ट्रक्चर सोकैडार *) और क्ली एडिटर, और क्लिलन); यदि (न्यूज़फ़ॉर्फ & lt; 0) {printf ("[त्रुटि] स्वीकार पर"); वापसी -1; बर्जो (बफर, एसओबी); N = पठन (न्यूज़फ़ॉर्फ, बफर, SOB-1); यदि (n & lt; 0) {printf ("[त्रुटि] सॉकेट से पढ़ना"); वापसी -1; } Printf ("संदेश: _% s_ \ n", बफर); करीब (newsockfd); } बंद (sockfd); Cservrun = 0; वापसी 0; }   

अगर मैं "सर्वर रनिंग सर्वर कोड" में "सी रन सर्वर कोड" (वापसी 0 से पहले) में कुछ समय (1) लूप जोड़ता हूं तो सर्वर ज़िंदा रहता है और संदेश पढ़ता रहता है । मुझे कहना होगा कि मैं न तो फोरट्रान प्रोग्रामिंग और सी प्रोग्रामिंग में विशेषज्ञ हूं।

मैं बस समाधान मिला मैंने मेकफाइल में कुछ बदलाव किए और मुझे पता चला कि मैं वास्तव में -थथथ विकल्प को याद किया। यह वाकई अजीब है कि कोई त्रुटि संदेश नहीं था और यह धागा बिल्कुल भी बनाया गया था। आपकी सभी सहायता के लिए बहुत बहुत धन्यवाद! मैं इसकी सराहना करता हूं।

No comments:

Post a Comment