通過論壇搜索後,我遇到了一些答案nevertheles我無法得到一個明確的答案如何在C++中的新線程中運行靜態方法。我主要關心的是啓動線程的最佳方法是什麼?(它是否也可以從另一個線程內部工作?) 哪個頭文件更適合使用? thread.h,pthread.h?如何在新線程中運行靜態函數?
我想創建一個新的線程(當一個給定的方法被調用時)並在這個線程內調用另一個函數... 任何提示我該如何解決這個問題?
非常感謝你們提前!
通過論壇搜索後,我遇到了一些答案nevertheles我無法得到一個明確的答案如何在C++中的新線程中運行靜態方法。我主要關心的是啓動線程的最佳方法是什麼?(它是否也可以從另一個線程內部工作?) 哪個頭文件更適合使用? thread.h,pthread.h?如何在新線程中運行靜態函數?
我想創建一個新的線程(當一個給定的方法被調用時)並在這個線程內調用另一個函數... 任何提示我該如何解決這個問題?
非常感謝你們提前!
在線程中運行靜態成員函數沒有問題。只需使用std::thread
的方式相同免提功能:
#include <thread>
class Threaded
{
public:
static void thread_func() {}
};
int main()
{
std::thread t(Threaded::thread_func);
t.join();
return 0;
}
當然,開始線程會從其他線程正常工作。使用符合C++ 11標準的編譯器時,應使用#include <thread>
。否則看看boost::thread
。它的用法很相似。
這樣做,這將是最好的方式OOPS: 定義一個切入點(entryPoint()
),它會調用一個成員函數(myThreadproc()
)。入口點將啓動線程並致電myThreadproc
。然後你可以訪問所有的成員變量和方法。
myClassA.h
class A
{
static void *entryPoint(void *arg);
void myThreadproc();
void myfoo1();
void myfoo2();
}
myClassA.cpp
void *A::entryPoint(void *arg)
{
A *thisClass = (A *)arg;
thisClass-> myThreadproc();
}
void A::myThreadproc()
{
//Now this function is running in the thread..
myfoo1();
myfoo2();
}
現在可以創建線程這樣的:
int main()
{
pthread_t thread_id;
pthread_create(&thread_id,NULL,(A::entryPoint),new A());
//Wait for the thread
return 0;
}
'答: :entryPoint'需要返回'void *'。 – Tudor
thanks .. edited .. – user739711
我想你想在'entryPoint'中調用'myThreadproc',對吧? – Tudor
假設例如您的靜態函數有兩個參數:
#include <boost/thread/thread.hpp>
void launchThread()
{
boost::thread t(&MyClass::MyStaticFunction, arg1, arg2);
}
這將需要鏈接到Boost.Thread庫。
這是操作系統特定的,或者至少它會是所有編譯器實現std :: thread之前。 (它是C++ 11的一部分)。你在使用哪種操作系統? – Benj
看起來您應該從C++語言的基礎知識入手,以瞭解關鍵字「靜態」的含義。 –
順便說一句,這裏的例子如何傳遞靜態成員線程與解釋http://stackoverflow.com/questions/7761527/passing-static-method-as-argument-no-address-of-operator-required –