2011-04-20 26 views
18
thread_ = boost::thread(boost::function< void (void)>(boost::bind(&clientTCP::run , this))); 

koşmak böyle bir tartışma vardır mümkün olmasıdır:Bir argümanı artırmak için nasıl :: thread?

void clientTCP::run(boost:function<void(std::string)> func); 

ve eğer evet benim artırmak :: iplik çağrı

Teşekkür yazılmalıdır nasıl.

cevap

27

Aşağıdaki kod boost::bind(&clientTCP::run , this), bir işlev çağrısı tanımlar. Geçerli örnekte() run işlevini çağırır. boost yapabileceğiniz bağlamak :: ile aşağıdaki: Bir fonksiyonu ile boost :: iplik örneğini inşa etmek isterseniz
http://www.boost.org/doc/libs/1_46_1/doc/html/thread/thread_management.html

:

// Pass pMyParameter through to the run() function 
boost::bind(&clientTCP::run, this, pMyParameter) 

Buradaki belgeleri ve örneğe bakın veya belirtilebilir nesnenin sağlanabilmesi için argümanının sağlanması gerekir, bu ek argüman iletimi :: thread yapıcısına ileterek yapılabilir:

void find_the_question(int the_answer); 

boost::thread deep_thought_2(find_the_question,42); 

Bu yardımcı olur umarım.

7

Gelecek çalışma için, Boost'un varsayılan olarak argümanları değere göre ilettiğini belirtmek istedim. Yani bir referansı geçmek istiyorsanız, boost::ref() ve boost::cref() yöntemlerine sahip olursunuz, bunlar sabit referanslar içindir.

Yine de referans için & işlecini kullanabilirsiniz, ancak emin değilim, her zaman boost::ref kullanıyorum.

+0

Bu ısırdı. Bunun için teşekkürler. – RandomInsano

6
thread_ = boost::thread(boost::function< void (void)>(boost::bind(&clientTCP::run , this))); 

bindvefunction gereksizdir ve kod daha yavaş olmasına ve daha fazla bellek kullanır. Sadece yapın:

thread_ = boost::thread(&clientTCP::run , this); 

bir argüman sadece bir argüman eklemek eklemek için:

thread_ = boost::thread(&clientTCP::run , this, f); 
İlgili konular