2013-10-08 5 views
7

सी ++ में स्ट्रिंग करने के लिए std::thread::id टाइपकास्ट कैसे करें? मैं std::this_thread::get_id() द्वारा स्ट्रिंग या चार सरणी में जेनरेट आउटपुट टाइप करने का प्रयास कर रहा हूं।std :: thread :: id को C++ में स्ट्रिंग करने के लिए कैसे परिवर्तित करें?

+0

"कन्वर्ट" से आपका क्या मतलब है? आप "रूपांतरित" 'std :: thread :: id' के साथ क्या करना चाहते हैं? – Walter

उत्तर

15
auto myid = this_thread.get_id(); 
stringstream ss; 
ss << myid; 
string mystring = ss.str(); 
4

असल std::thread::idप्रिंट करने योग्यostream उपयोग कर रहा है (this देखें)।

तो तुम यह कर सकते हैं:

#include <sstream> 

std::ostringstream ss; 

ss << std::this_thread::get_id(); 

std::string idstr = ss.str(); 
4

"परिवर्तित" std::thread::id एक std::string को केवल आपके कुछ अद्वितीय लेकिन अन्यथा बेकार पाठ देता है। वैकल्पिक रूप से, आप इसे मनुष्यों द्वारा आसान पहचान के लिए उपयोगी एक छोटे पूर्णांक संख्या में "रूपांतरित" कर सकते हैं:

std::size_t index(const std::thread::id id) 
{ 
    static std::size_t nextindex = 0; 
    static std::mutex my_mutex; 
    static std::map<std::thread::id, st::size_t> ids; 
    std::lock_guard<std::mutex> lock(my_mutex); 
    if(ids.find(id) == ids.end()) 
    ids[id] = nextindex++; 
    return ids[id]; 
} 
संबंधित मुद्दे