티스토리 뷰

프로그래밍/C++

비동기 함수 호출

에어버스 2023. 7. 25. 23:08

함수를 비동기로 실행한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <future>
 
int GetMoneyFromDB(int CharCd)
{
    std::thread::id ThreadID = std::this_thread::get_id();
    std::cout << "GetMoneyFromDB, ThreadID : " << ThreadID << std::endl;
    std::cout << CharCd << std::endl;
    return CharCd;
}
int main()
{
    std::thread::id ThreadID = std::this_thread::get_id();
    std::cout << "메인 스레드 ID : " << ThreadID << std::endl << std::endl;
 
    std::cout << "std::async(std::launch::async, GetMoneyFromDB)" << std::endl;
    std::future<int>future1 = std::async(std::launch::async, GetMoneyFromDB, 10);
    std::this_thread::sleep_for(std::chrono::milliseconds(10)); // 비동기 함수 실행을 위한 시간 지연
    std::cout << "메인 스레드에서 10ms 대기" << std::endl;
 
    int result1 = future1.get(); // 비동가 함수 호출 후 시간지연 없으면 get() 호출할때 비동기 함수 실행됨
    std::cout << "GetMoneyFromDB의 반환값 " << result1 << std::endl << std::endl;
 
    std::cout << "std::async(std::launch::deferred, GetMoneyFromDB)" << std::endl;
    std::future<int> future2 = std::async(std::launch::deferred, GetMoneyFromDB, 20);
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
    std::cout << "메인 스레드에서 10ms 대기" << std::endl;
 
    int result2 = future2.get();
    std::cout << "GetMoneyFromDB의 반환값 " << result2 << std::endl << std::endl;
 
    return 0;
}
cs

2행 : 비동기 함수 호출을 위한 헤더 추가
17행 : std::launch::async  async 정의한 후 바로 비동기로 실행하도록 지정하고 GetMoneyFromDB() 비동기 호출하며 함수 호출때 인수 10 을 전달한다. 
18행 : 시간을 지연시켜 대기한다. std::launch::async 방식으로 비동기 호출하면 시간 지연시켜 대기하지만 이 대기와 상관없이 바로 실행한다.
21행 : 비동기 함수로 실행된 GetMoneyFromDB() 의 반환 값을 얻는다.
25행 : std::launch::deferred  future를 사용하여 결과를 대기할때 실행된다. async 정의한 후 10ms 지연시켜 대기한 이후에 future2의 get() 를 호출할때 GetMoneyFromDB() 를 시작하고 인수 20 을 전달한다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31