336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
최신 버전의 C++11 라이브러리에서는 운영체제의 함수를 사용하지 않고도 자체적으로 멀티스레드를 구현할 수 있습니다. std::thread 클래스가 바로 그 기능을 수행합니다. 함수를 서로 다른 스레드에서 실행시키는 방법은 다음과 같습니다.
1. 스레드 객체를 생성한다.
std::thread의 생성자는
매개변수가 없는 함수의 경우: thread(함수)
매개변수가 있는 함수의 경우: thread(함수, 매개변수 순서대로 나열...)
이렇게 스레드 객체를 생성하는 것만으로도 이미 함수가 실행됩니다. 별도의 start/stop 함수를 호출하지 않습니다. 왜인지는 모르겠으나 C#처럼 해당 스레드를 일시중지시켰다 재개하는 기능은 원래 없습니다. C++의 thread클래스는 해당 함수가 스스로 종료할 때 까지 스레드를 유지합니다.
2. thread::join()함수를 실행한다.
C#의 스레드 클래스는 Main 메서드가 종료되어도 thread객체는 함수가 종료될때까지 그대로 유지되는데, C++에서는 스레드가 다 종료될 때까지 main함수에게 대기하라고 지시해야 합니다. join함수가 그런 역할을 합니다.
thread 클래스는 다음과 같은 틀을 가집니다.
/* thread.cpp */
#include <iostream>
#include <thread>
void function1();
void function2(const char * str);
void function3(const char * str, int count);
int main(int argc, char * argv[])
{
/* function1 함수를 별도의 스레드에서 실행 시작 */
std::thread thread1(function1);
/* function2, 3 함수를 매개변수를 대입해 별도의 스레드에서 실행 시작 */
std::thread thread2(function2, "Hello, World!");
std::thread thread3(function3, "count 5000", 10);
char _tmp = '\0';
std::cout << "main... start" << std::endl;
std::cout << "main... end" << std::endl;
/* 모든 스레드가 종료되기도 전에 main 함수가 종료되지 않도록 보류시킵니다. */
/* 이것을 넣기 않으면 Debug Assertion Error를 냅니다. */
thread1.join();
thread2.join();
thread3.join();
std::cout << "Press Enter to Exit...";
std::cin.ignore();
return 0;
}
void function1()
{
for (int i = 0; i < 50; i++)
{
std::cout << "function1 : " << i << std::endl;
}
}
void function2(const char * str)
{
for (int i = 0; i < 50; i++)
{
std::cout << "function2 : " << str << " " << i << std::endl;
}
}
void function3(const char * str, int count)
{
for (int i = 0; i < count; i++)
{
std::cout << "function2 : " << str << " " << i << std::endl;
}
}
위 코드를 실행하면 function1, function2, function3이 서로 다른 스레드에서 동시에 실행되어 출력 결과에 세 함수의 출력이 혼재되는 것을 확인할 수 있습니다.
'Programming Language > C&C++' 카테고리의 다른 글
| 소켓 통신 #2 - AF_INET 사용하기 (2) (0) | 2014.09.19 |
|---|---|
| 소켓 통신 #2 - AF_INET 사용하기 (1) (0) | 2014.09.19 |
| 소켓 통신 #1 - 소켓 통신에 쓰이는 구조체 (2) | 2014.09.19 |
| C언어 표준 문자열 관련 함수 – ANSI, Wide Char별 함수 이름 정리 (0) | 2011.02.14 |
| 코드 컨벤션 정리 – 낙타, 파스칼, 헝가리안 (0) | 2011.02.11 |