程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++11特性之std::thread

c++11特性之std::thread

編輯:關於C++

博客 [c++11特性之std::thread--初識](http://blog.csdn.net/wangshubo1989/article/details/49592517 std::thread)
講了std::thread::join和std::thread::detach的用法。今天就再來點深入的。

先看看這個:

int main()
{
    std::thread t(&thread_function);
    std::cout << main thread
;
    // t.join();
    t.detach();
    t.join();   // Error
    return 0;
}

一旦 detached, 就不能再join
這個時候總要有新東西出場了:
joinable()

#include        // std::cout
#include          // std::thread

void mythread() 
{
  // do stuff...
}

int main() 
{
  std::thread foo;
  std::thread bar(mythread);

  std::cout << Joinable after construction:
 << std::boolalpha;
  std::cout << foo:  << foo.joinable() << '
';
  std::cout << bar:  << bar.joinable() << '
';

  if (foo.joinable()) foo.join();
  if (bar.joinable()) bar.join();

  std::cout << Joinable after joining:
 << std::boolalpha;
  std::cout << foo:  << foo.joinable() << '
';
  std::cout << bar:  << bar.joinable() << '
';

  return 0;
}

之前的例子中, 我們都是使用的普通的函數. 我們本可以使用更多,尤其你要牢記的就是c++是一個面向對象。

#include 
#include 

class MyFunctor
{
public:
    void operator()() {
        std::cout << functor
;
    }
};

int main()
{
    MyFunctor fnctor;
    std::thread t(fnctor);
    std::cout << main thread
;
    t.join();
    return 0;
}

上面的代碼,我創建了一個函數對象,把它付給一個線程任務

也許你會像下面這樣寫:

std::thread t(MyFunctor());

但是,編譯時通不過的,你應該這樣寫:

std::thread t((MyFunctor()));

必須加一個 () 來封裝 MyFunctor().

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved