मैं थ्रेडिंग बूस्ट करने के लिए नया हूं और मैं कई धागे से आउटपुट कैसे किया जाता है इसके साथ अटक गया हूं। मेरे पास एक साधारण बढ़ावा है :: धागा 9 से 1 तक गिर रहा है; मुख्य धागा इंतजार करता है और फिर प्रिंट करता है "लिफ्टऑफ .. !!"बूस्ट थ्रेडिंग: कॉउट व्यवहार
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
struct callable {
void operator()();
};
void callable::operator()() {
int i = 10;
while(--i > 0) {
cout << "#" << i << ", ";
boost::this_thread::yield();
}
cout.flush();
}
int main() {
callable x;
boost::thread myThread(x);
myThread.join();
cout << "LiftOff..!!" << endl;
return 0;
}
समस्या यह है कि मुझे आउटपुट प्रदर्शित करने के लिए मेरे धागे में एक स्पष्ट "cout.flush()" कथन का उपयोग करना होगा। अगर मैं फ्लश() का उपयोग नहीं करता, तो मुझे केवल "लिफ्टऑफ !!" मिलता है आउटपुट के रूप में।
क्या कोई सलाह दे सकता है कि मुझे स्पष्ट रूप से फ्लश() का उपयोग क्यों करना है?
मेरे लिए फ्लश() '(लिनक्स 3.0.6, जीसीसी 4.5.3, 1.46 बढ़ाएं) के साथ या बिना मेरे लिए उसी तरह से व्यवहार करता है। – delicateLatticeworkFever
एफडब्ल्यूआईडब्ल्यू, मैंने Win7x64 (MSVC10) पर अपने प्रोग्राम का परीक्षण किया, और यह फ्लश() के बिना संख्याओं को प्रिंट करता है। ओम आप किस मंच का परीक्षण करते हैं? –
@ कोनराड रुडॉल्फ: "दौड़ की स्थिति" दो अलग-अलग स्टडआउट बफर नहीं बनाएगी, जो कि एकमात्र कल्पनीय स्पष्टीकरण है कि क्यों मुख्य रूप से 'एंडल' एक जुड़ा हुआ थ्रेड पर प्रतीक्षा करने के बाद फ्लश नहीं करता है। (उल्लेख नहीं है: यहां कोई भी "दौड़ की स्थिति" नहीं है, केवल दो धागे हैं और एक दूसरे पर इंतजार कर रहा है।) – delicateLatticeworkFever