2008-09-11 14 views
43

मैंने सी में एक और प्रक्रिया शुरू करने के लिए कांटा() का उपयोग किया है। मैं एक नया धागा कैसे शुरू करूं?मैं सादा सी में धागे कैसे शुरू करूं?

+0

यह प्लेटफ़ॉर्म पर निर्भर करता है। विंडोज़ पर इसे कैसे करें: [http://msdn.microsoft.com/en-us/library/ms682453.aspx ](http://msdn.microsoft.com/en-us/library/ms682453.aspx) –

+0

जैसा कि आप CreateThread दस्तावेज़ से जुड़े हुए हैं, जैसा कि प्रोग्राम सी रनटाइम लाइब्रेरी का उपयोग करता है, _beginthreadex का उपयोग किया जाना चाहिए, CreateThread नहीं। – ChrisN

+0

धन्यवाद, मैंने यह नहीं देखा था। अगर आप सीआरटी का उपयोग कर रहे हैं तो आप कैसे जानते हैं? मैंने सोचा कि सबकुछ इसका इस्तेमाल करता है। –

उत्तर

50

चूंकि आपने फोर्क का उल्लेख किया है() मुझे लगता है कि आप यूनिक्स जैसी प्रणाली पर हैं, इस मामले में POSIX threads (आमतौर पर पीथ्रेड के रूप में जाना जाता है) आप जो उपयोग करना चाहते हैं।

विशेष रूप से, pthread_create() वह फ़ंक्शन है जिसे आपको एक नया धागा बनाने के लिए आवश्यक है। इसके तर्क हैं:

int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * 
    (*start_routine)(void *), void * arg); 

पहला तर्क थ्रेड आईडी पर लौटा हुआ सूचक है। दूसरा तर्क थ्रेड तर्क है, जो तब तक पूर्ण हो सकता है जब तक कि आप एक विशिष्ट प्राथमिकता के साथ धागा शुरू नहीं करना चाहते हैं। तीसरा तर्क धागा द्वारा निष्पादित समारोह है। चौथा तर्क यह है कि जब इसे निष्पादित किया जाता है तो थ्रेड फ़ंक्शन को पास किया गया एकल तर्क होता है।

+8

यहां इसका उपयोग करने के तरीके पर एक उदाहरण दिया गया है: http://timmurphy.org/2010/05/04/pthreads-in-ca-minimal-working-example/ – tremendows

+1

क्या पॉज़िक्स धागे को "सादा सी" के रूप में नहीं माना जाता है कि अब सी 11 मानक उन्हें परिभाषित करता है? – Hydronium

+0

जबकि सी 11 मल्टीथ्रेडिंग एपीआई _heavily_ POSIX धागे से प्रभावित है, वे समान नहीं हैं। तो यह मुझे यह कहने का अधिकार नहीं है कि POSIX धागे "सादा सी" हैं। –

6

pthreads एक अच्छी शुरुआत, बाहर देखने here

2

चेक pthread (इसे POSIX धागा) पुस्तकालय है।

12

AFAIK, एएनएसआई सी थ्रेडिंग को परिभाषित नहीं करता है, लेकिन विभिन्न पुस्तकालय उपलब्ध हैं।

यदि आप विंडोज़ पर चल रहे हैं, तो msvcrt से लिंक करें और _beginthread या _beginthreadex का उपयोग करें।

यदि आप अन्य प्लेटफ़ॉर्म पर चल रहे हैं, तो pthreads लाइब्रेरी देखें (मुझे यकीन है कि अन्य भी हैं)।

8

थ्रेड सी मानक का हिस्सा नहीं हैं, इसलिए थ्रेड का उपयोग करने का एकमात्र तरीका कुछ लाइब्रेरी का उपयोग करना है (उदाहरण: यूनिक्स/लिनक्स में पॉज़िक्स थ्रेड, _beginthread/_beginthreadex अगर आप उस थ्रेड से सी-रनटाइम का उपयोग करना चाहते हैं या सिर्फ CreateThread Win32 API)

संबंधित मुद्दे