Создайте функцию, которую вы хотите, чтобы поток выполнялся, например:
void task1(std::string msg)
{
std::cout << "task1 says: " << msg;
}
Теперь создайте объект thread
, который в конечном итоге вызовет указанную выше функцию следующим образом:
std::thread t1(task1, "Hello");
(Вам необходимо #include <thread>
, чтобы получить доступ к классу std::thread
)
Аргументы конструктора - это функция, которую будет выполнять поток, за которой следуют параметры функции. Поток запускается автоматически при построении.
Если позже вы захотите дождаться, пока поток завершит выполнение функции, вызовите:
t1.join();
(Присоединение означает, что поток, который вызвал новый поток, будет ждать, пока новый поток завершит выполнение, прежде чем он продолжит собственное выполнение).
Код
#include <string>
#include <iostream>
#include <thread>
using namespace std;
// The function we want to execute on the new thread.
void task1(string msg)
{
cout << "task1 says: " << msg;
}
int main()
{
// Constructs the new thread and runs it. Does not block execution.
thread t1(task1, "Hello");
// Do other things...
// Makes the main thread wait for the new thread to finish execution, therefore blocks its own execution.
t1.join();
}
Подробнее о std :: thread здесь
- В GCC компилируйте с
-std=c++0x -pthread
.
- Это должно работать для любой операционной системы, если ваш компилятор поддерживает эту функцию (C ++ 11).
person
MasterMastic
schedule
27.06.2012