It is very simple to call a member function or static member function from thread following is the example the shall help us.
For best understanding please COPY, PASTE and RUN in any online compiler.
include <iostream> #include <thread> #include <string> using namespace std; class Suggest { string m_name; public: Suggest() { m_name="Tech"; } void updateName(string str) { m_name=str; } void displayName() { cout<<"Name "<<m_name<<endl; } static void display(string str) { cout<<"Static Function Call :: "<<str<<endl; } }; int main() { //Call static function both ways are correct std::thread objThd(Suggest::display,"without &"); objThd.join(); std::thread objThd1(&Suggest::display,"with &"); objThd1.join(); cout<<endl<<"Call Member Function "<<endl; //call thread by object for member function, //object is passed by value Suggest sObj; cout<<"Object PASSED-BY-VALUE "<<endl; sObj.displayName(); std::thread objThrd(&Suggest::updateName,sObj,"Value - Suggestion"); objThrd.join(); sObj.displayName(); //object is passed by reference cout<<endl<<"Object PASSED-BY-REFERENCE "<<endl; Suggest sObjNew; sObjNew.displayName(); std::thread objThrd1(&Suggest::updateName,&sObjNew,"Reference - Suggestion"); objThrd1.join(); sObjNew.displayName(); //object is passed by pointer cout<<endl<<"Object PASSED-BY-POINTER "<<endl; Suggest* ptrObj=new Suggest; ptrObj->displayName(); std::thread objThrd2(&Suggest::updateName,ptrObj,"Pointer - Suggestion"); objThrd2.join(); ptrObj->displayName(); return 0; } |
Compile: g++ classFunctions.cpp -o classFunctions -lpthread |
Output: $ ./classFunctions Static Function Call :: without & Static Function Call :: with & Call Member Function Object PASSED-BY-VALUE Name Tech Name Tech Object PASSED-BY-REFERENCE Name Tech Name Reference - Suggestion Object PASSED-BY-POINTER Name Tech Name Pointer - Suggestion |
PREV:: How to Call function with Reference Variable,
Default Argument and Pointer Variable from thread.
So feel free to put Questions
Your Comments /Suggestions & Questions are always welcome.
We would like to help you with best of our knowledge.
So feel free to put Questions
No comments:
Post a Comment