2008-10-06 14 views
5

क्या पोर्टेबल सी ++ के साथ थ्रेड और/या प्रक्रिया पहचानकर्ता (स्ट्रिंग, int, ...) प्राप्त करने का तरीका है?सी ++ धागा/प्रक्रिया पहचानकर्ता

+0

पोर्टेबल प्लेटफॉर्म/आर्किटेक्चर के पार पोर्टेबल? – QAZ

उत्तर

7

कोई पोर्टेबल तरीका नहीं है जब पोर्टेबल का मतलब है कि पर प्रत्येक प्लेटफ़ॉर्म पर काम करता है, जिसके लिए एक C++ कंपाइलर मौजूद है। इस तरह से एक सी ++ मानक का हिस्सा होना था, इस मामले में यह वास्तव में हर जगह काम करेगा (बस सी ++ मानक काम के अन्य हिस्सों की तरह)। मानक में नहीं जो कुछ भी किसी प्लेटफॉर्म पर काम करने की गारंटी नहीं देता है, जब तक मंच इस मानक का समर्थन करने के लिए कहता है।

प्रत्येक समाधान लोगों ने यहां सुझाव दिया है कि एक समाधान है जो बाहरी पुस्तकालय का उपयोग करता है और इस प्रकार केवल उस लाइब्रेरी द्वारा समर्थित प्लेटफॉर्म पर काम कर सकता है; और प्रत्येक मौजूदा मंच के लिए कोई लाइब्रेरी उपलब्ध नहीं है।

शायद वह जो आपको सबसे दूर ले जाएगा, वह पॉसिक्स है, प्रत्येक यूनिक्स जैसे सिस्टम कम से कम कुछ पॉज़िक्स (अधिक बेहतर) का समर्थन करने की कोशिश करता है, बहुत कम खुद को वास्तव में 100% पॉज़िक्स-अनुरूप प्लेटफॉर्म (उदाहरण के लिए) ए/यूएक्स, एईक्स, एचपी-यूएक्स, आईआरईएक्स, मैक ओएस एक्स 10.5, मिनिक्स, क्यूएनएक्स, सोलारिस, यूनिक्सवेयर, वीएक्सवर्क्स, ... कुछ नाम देने के लिए, ज़ाहिर है)। हालांकि, वहां कुछ प्लेटफ़ॉर्म हैं जो कम से कम कुछ POSIX समर्थन प्रदान करते हैं, कुछ और, कुछ कम और कुछ लगभग POSIX- अनुपालन (उदा। फ्रीबीएसडी, लिनक्स, नेटबीएसडी, बीओओएस, ओपनबीएसडी, ... और अन्य) हैं।

विंडोज दुर्भाग्य से एक होने से बहुत दूर है। एनटी आंशिक रूप से POSIX अनुरूप था, लेकिन अब यह कम या ज्यादा गायब हो गया है (Win2000/20003, WinXP, और Vista को अभी भी एक POSIX अनुकरण मोड में सेट किया जा सकता है, यूनिक्स के लिए माइक्रोसॉफ्ट विंडोज सेवाओं को स्थापित करके कुछ पीओएसआईक्स कॉल को आंतरिक एपीआई कॉल में अनुवाद करना - एसएफयू 3.5 या उच्चतर), हालांकि बाहरी पुस्तकालयों के माध्यम से विंडोज़ पर कुछ पॉज़िक्स कार्यक्षमता प्राप्त करने के तरीके भी हैं (सिगविन एलजीपीएल पुस्तकालयों को प्रदान करता है जो आप अपने ऐप से लिंक कर सकते हैं ताकि विंडोज़ पर उचित मात्रा में POSIX फ़ंक्शंस सक्षम हो सकें)।

पीओएसईक्स का लाभ न केवल यह अपेक्षाकृत व्यापक है, बल्कि यह भी मानकीकृत है और आप आसानी से इंटरनेट पर मानक देख सकते हैं। POSIX कॉल का उपयोग करके आप एक थ्रेड आईडी और एक प्रक्रिया आईडी प्राप्त कर सकते हैं।

9

आपके पास कुछ तरीके हैं, लेकिन सभी आपके लिए धागे को सारणीबद्ध बाहरी पुस्तकालय का उपयोग करते हैं।

लोकप्रिय विकल्पों के अलावा, दो हैं:

  1. Boost.Thread पुस्तकालय। यह सबसे पोर्टेबल है लेकिन बूस्ट के साथ काम करता है, जो एक बड़ी लाइब्रेरी
  2. Qt लाइब्रेरी है। यह कम पोर्टेबल है और क्यूटी, एक बड़ी पुस्तकालय के साथ काम करने के लिए प्रलोभन है।

यदि आप इन दोनों पुस्तकालयों में पहले से ही किसी का उपयोग करते हैं, तो मैं इसके साथ चिपकने की अनुशंसा करता हूं। अन्यथा, देखें कि वे कौन से अन्य टूल प्रदान करते हैं और एक विकल्प बनाते हैं।

+1

बूस्ट बहुत बड़ा है, लेकिन ध्यान रखें कि आप केवल जो भी उपयोग करते हैं उसके लिए भुगतान करते हैं। – Ferruccio

1

मैंने हमेशा सोचा था कि थ्रेड सी ++ से बाहरी थे। जावा में, भाषा में अंतर्निहित मूल धागा है।

आपको एक पोर्टेबल थ्रेड लाइब्रेरी खोजनी होगी।

0

मुझे यकीन नहीं है कि वे कितने पोर्टेबल हैं लेकिन Posix threads एक और विकल्प हो सकता है जिसे आप विचार करना चाहते हैं। here भी देखें। मैं स्टीव की टिप्पणी से सहमत हूं - कौन से प्लेटफॉर्म पर पोर्टेबल?

1

पोर्टेबल लाइब्रेरी का उपयोग करने का एकमात्र तरीका है। आईडी Qt (यह GUI ऐप नहीं होना चाहिए) या शायद wxWidgets की अनुशंसा करें। यदि आप गेम को विकसित कर रहे हैं SDL

इसके अलावा बूस्ट libs की जांच करें जो उनके पास हो सकती हैं।

0

getpid() प्रक्रिया आईडी प्राप्त करने का एक पोर्टेबल तरीका है।

1

आप ACE library का भी उपयोग कर सकते हैं, जो एक प्लेटफार्म स्वतंत्र रैपर लागू करता है। पीआईडी ​​ढूँढना लाइब्रेरी में फाइलों में से एक होगा (शायद ACE_Process/ACE_Thread)।

+0

यदि आपका इरादा पोर्टेबल तरीके से प्लेटफ़ॉर्म प्रक्रिया आईडी प्राप्त करना है तो एसीई कई प्लेटफ़ॉर्म के लिए एक सिद्ध समाधान है। हालांकि हर प्लेटफॉर्म एक ही जानकारी प्रदान नहीं कर सकता है। उस स्थिति में आपको वह नहीं मिलेगा जो आप चाहते हैं। – lothar

0

मुझे नहीं लगता कि आपको एक पोर्टेबल विधि नहीं मिल जाएगी जब तक यह एक रैपर लाइब्रेरी के माध्यम से न हो। प्रत्येक थ्रेडिंग सिस्टम (जैसे विंडोज, या पीओएसईक्स) के पास अपनी स्वयं की तंत्र होगी।

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