簡體   English   中英

C++ 中的類多線程

[英]Multi-threading with classes in C++

我對 C++ 中的線程有疑問。 我想創建由 class 成員方法組成的線程,並分配了特定的 object。 更重要的是,另一個用戶定義的 class 的 object 被傳遞給該方法。 請在下面找到代碼:

Grid an_chan(NX, NY, xmax, ymax);
an_chan.calc_paraFlow(anode);

Grid *ptr_grid = &an_chan;    

Variable T(Tin, Tinit, lambda_m, rho_m, Cp_m);
Variable *ptr_T = &T;

std::thread first (&Variable::initialize, ptr_T, ptr_grid);

first.join();

這是初始化方法原型:

void Variable::initialize(Grid& grid_obj)

在我嘗試添加線程之前,一切正常。

我只是想知道這是否不是編譯器問題? 也許我的代碼有問題我沒有注意到? 任何可能的修復? 下面我包括了編譯器返回的錯誤。 如您所見,我使用的是 TDM GCC 5.1.0。 我之前用線程使用它,一切都很好。

在 C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/thread:39:0 包含的文件中,來自 main.cpp:13: C: -64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/functional:在“struct std::_Bind_simple(chal::Variable, chal::Grid)>”的實例化中:C:/TDM -GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/thread:142:59: 來自 'std::thread::thread(_Callable&&, _Args&&...) [with _Callable = void (chal::Variable::*)(chal::Grid&); _Args = {chal::Variable&, chal::Grid&}]' main.cpp:45:61: 從這里需要 C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include /c++/functional:1505:61: 錯誤: 'class std::result_of(chal::Variable, chal::Grid)>' typedef typename result_of<_Callable(_Args...)> 中沒有名為 'type' 的類型: :類型結果類型; ^ C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/functional:1526:9: 錯誤:在'class std::result_of( chal::變量,chal::Grid)>' _M_invoke(_Index_tuple<_Indices...>)

當您initialize function 通過引用獲取它的參數時,您應該將參數包裝在std::ref中。

std::thread first(&Variable::initialize, ptr_T, std::ref(*ptr_grid));

正如@acraig5075 提到的:

std::thread 構造函數的第二個參數應該是指向 object 的指針。 您正在取消引用 ptr_T。

在此之后,您可能還想在傳遞給線程之前綁定 function:

std::thread first(std::bind(&Variable::initialize, ptr_T, *ptr_grid));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM