-1
我正在.NET中創建可以在服務器端使用的應用程序。我的應用程序也有C++部分。在一個C++類中,我需要創建一個應該貫穿對象生命週期的線程。 我正在使用CreateThread函數來創建新的線程。創建線程的非靜態函數
問題是,它需要一個靜態函數作爲運行線程的參數。因爲我想在服務器端部署它,所以我不想使用靜態函數來用於線程。我想使用該方法的對象的成員函數。
有沒有更好的方式來創建線程
我正在.NET中創建可以在服務器端使用的應用程序。我的應用程序也有C++部分。在一個C++類中,我需要創建一個應該貫穿對象生命週期的線程。 我正在使用CreateThread函數來創建新的線程。創建線程的非靜態函數
問題是,它需要一個靜態函數作爲運行線程的參數。因爲我想在服務器端部署它,所以我不想使用靜態函數來用於線程。我想使用該方法的對象的成員函數。
有沒有更好的方式來創建線程
你不能一個成員函數指針傳遞給CreateThread
,但你可以通過它轉發到成員函數非成員函數。
您可以將參數傳遞給CreateThread
,傳遞給您的函數。使用此從中穿過你的類的實例:,
struct foo
{
void thread_func();
static DWORD CALLBACK thread_func_thunk(void *arg)
{
((foo*)arg)->thread_func();
}
};
foo fooinst;
CreateThread(nullptr, 0, foo::thread_func_thunk, (void*)&fooinst, 0, nullptr)
+1儘管「thread_func_thunk」 :)富可以是抽象的,那麼你就可以在你的產業鏈添加富,實現thread_func()你想怎麼,雖然你應該把它稱爲'任務',或類似的)。 –
我有一個疑問,這個線程假設貫穿創建它的對象的整個生命週期。在那段時間內,如果另一個對象訪問thread_func_thunk函數,那麼它是否會導致任何問題,或者兩個創建的線程將安全地並行運行? – user2692032
我發佈的整個示例都是線程安全的。由你決定'thread_func'是否安全並且/或者用不同的實例調用它。 –