2011-12-15 13 views
6

का उपयोग कर मैं कुछ सी संकलित करने के लिए कोशिश कर रहा हूँ कोड को संकलित करने के ++ कोड धागे का उपयोग करता है:कैसे # शामिल <thread>

#include <iostream> 
#include <thread> 
void hello() 
{ 
    std::cout<<"Hello Concurrent World\n"; 
} 

int _main(int argc, _TCHAR* argv[]) 
{ 
    std::thread t(hello); 
    t.join(); 
    return 0; 
} 

जब संकलन मैं त्रुटियों मिल:

c:\temp\app1\app1\app1.cpp(6): fatal error C1083: Cannot open 
include file: 'thread': No such file or directory 


~/Documents/C++ $ g++ -o thread1 thread1.cpp -D_REENTRANT -lpthread 
In file included from /usr/include/c++/4.5/thread:35:0, 
       from thread1.cpp:2: 
/usr/include/c++/4.5/bits/c++0x_warning.h:31:2: error: #error This file 
requires compiler and library support for the upcoming ISO C++ standard, 
C++0x. This support is currently experimental, and must be enabled with 
the -std=c++0x or -std=gnu++0x compiler options. 

मैं इन त्रुटियों को कैसे ठीक करूं ?

+0

http://stackoverflow.com/questions/2519607/c0x-stdthread-error-thread-not-member-of-std – q0987

उत्तर

9

<thread> और मानक थ्रेडिंग समर्थन एक नई सुविधा है (सी ++ 11 मानक में परिभाषित)। जी ++ के लिए, आपको कमांड लाइन में -std=c++0x को कमांड लाइन में जोड़ना होगा, जैसा कि त्रुटि संदेश में बताया गया है।

इसके अलावा, आप एक गैरमानक (माइक्रोसॉफ्ट विशेष) मुख्य, का उपयोग "क्लासिक" main और सामान्य char उपयोग कर रहे हैं:

// thread1.cpp 
#include <iostream> 
#include <thread> 

void hello() 
{ 
    std::cout<<"Hello Concurrent World\n"; 
} 

int main(int argc, char * argv[]) 
{ 
    std::thread t(hello); 
    t.join(); 

    return 0; 
} 

सूचना है कि नहीं सभी सी ++ 11 सुविधाओं वर्तमान compilers में उपलब्ध हैं; जहां तक ​​g ++ का संबंध है, आप उनके कार्यान्वयन की स्थिति here देख सकते हैं।

+0

का डुप्लिकेट यह ध्यान दिया जाना चाहिए कि कोउट थ्रेड सुरक्षित नहीं है। –

+0

@AlphaBravo: बिल्कुल नहीं, [कुछ गारंटी] हैं (http://stackoverflow.com/a/6374525/214671); इसके अलावा, इस विशिष्ट मामले में इसका उपयोग करके केवल एक धागा है, इसलिए यह सुरक्षित है। –

3

हां, हेडर फ़ाइल <thread> केवल सी ++ 11 नवीनतम मानक (केवल इस वर्ष को अंतिम रूप दिया गया) में मानक है।

जीसीसी के साथ, आपको नवीनतम नवीनतम 4.6 संस्करण की आवश्यकता होगी, और इसके साथ भी, सब कुछ C++ 11 मानक का समर्थन नहीं है। this table

2

जहां तक ​​एमएसवीसी चला जाता है, सी ++ 11 <thread> हेडर वीएस -2010 में समर्थित नहीं है - आपको विजुअल स्टूडियो 11 (http://msdn.microsoft.com/en) का डेवलपर पूर्वावलोकन खींचने की आवश्यकता होगी -us/vstudio/hh127353) आज इसे आजमाएं।

पर जानकारी के लिए http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx देखें कि नया 11.

इसके अलावा, दृश्य स्टूडियो के लिए C++ है पुस्तक (जो इस समय पूर्व जारी की गई है) के अपने पीडीएफ main() की निम्नलिखित परिभाषा है:

int main() 
{ 
    std::thread t(hello); 
    t.join(); 
} 

जो _TCHAR के साथ जीसीसी में अपरिभाषित होने वाली समस्याओं से बचाता है।

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