Middle
Ի՞նչ է std::future-ը C++-ում։
sobes.tech AI
Պատասխան AI-ից
std::future — դա C++-ի շաբլոնային դաս է, որը ներկայացնում է ասինխրոնային գործողության արդյունքը (արժեք կամ արտահայտություն), որը հասանելի կլինի ապագայում: Այն օգտագործվում է գործառույթի արդյունքը ստանալու համար, որը գործարկվել է առանձին հոսքով կամ std::async-ի միջոցով:
Հիմնական առանձնահատկությունները:
- Ասինխրոնություն: թույլ է տալիս կատարել գործողություն, առանց ներկայիս հոսքը խոչընդոտելու:
- Արդյունքի ստացում:
get()մեթոդը թույլ է տալիս ստանալ գործողության արդյունքը: Եթե արդյունքը դեռ պատրաստ չէ,get()կխոչընդոտի ներկայիս հոսքը մինչև այն պատրաստ լինի կամ արտահայտություն լինի: - Տվյալների փոխանցում: կապված է
std::promiseօբյեկտի հետ, որը տրամադրում է արդյունքը կամ արտահայտությունը սահմանելու միջոց: - Կարգավիճակ:
std::futureունի վիճակ, որը ցույց է տալիս, արդյոք արդյունքը պատրաստ է: Կարող եք ստուգելwait()կամwait_for()-ով: - Միայն մեկ անգամ ստացում:
get()մեթոդը կարելի է կանչել միայն մեկ անգամ յուրաքանչյուրstd::futureօբյեկտի համար: - Արդյունքի տիպը: տիպավորված է ասինխրոնային գործողության վերադարձվող արժեքով:
Օրինակ std::async-ի հետ օգտագործման:
#include <future>
#include <thread>
#include <chrono>
#include <iostream>
int calculate_something() {
std::this_thread::sleep_for(std::chrono::seconds(1));
return 42;
}
// Օրինակ `std::future`-ի օգտագործման `std::async`-ի հետ
int main() {
// Աշխատանքի գործարկում
std::future<int> result_future = std::async(std::launch::async, calculate_something);
// Այլ աշխատանք կատարում, մինչ գործողությունը հաշվարկվում է
std::cout << "Doing something else..." << std::endl;
// Արդյունքի ստացում (խոչընդոտում է, եթե պատրաստ չէ)
int result = result_future.get();
std::cout << "Result is: " << result << std::endl;
return 0;
}
Օրինակ std::promise-ի հետ օգտագործման:
#include <future>
#include <thread>
#include <iostream>
void worker_function(std::promise<int> promise_obj) {
std::this_thread::sleep_for(std::chrono::seconds(1));
// Արդյունքի սահմանում
promise_obj.set_value(123);
}
// Օրինակ `std::future`-ի օգտագործման `std::promise`-ի հետ
int main() {
// Ստեղծում `promise` և `future`
std::promise<int> promise_obj;
std::future<int> future_obj = promise_obj.get_future();
// Աշխատանքի գործարկում առանձին հոսքում, փոխանցելով `promise`
std::thread worker_thread(worker_function, std::move(promise_obj));
// Այլ աշխատանք կատարում, մինչ worker-ը աշխատում է
std::cout << "Doing something else..." << std::endl;
// Արդյունքի ստացում (խոչընդոտում է, եթե պատրաստ չէ)
int result = future_obj.get();
std::cout << "Result from worker: " << result << std::endl;
// Worker հոսքի ավարտման սպասում
worker_thread.join();
return 0;
}
std::future-ի կարևոր մեթոդները:
| Մեթոդ | Նկարագրություն |
|---|---|
get() |
Ստանում է արդյունքը: Խոչընդոտում է, եթե արդյունքը դեռ պատրաստ չէ: Կարող է կանչվել միայն մեկ անգամ: |
valid() |
Ստուգում է, կապված է արդյոք std::future-ը ընդհանուր վիճակի հետ: |
wait() |
Խոչընդոտում է ներկայիս հոսքը մինչև արդյունքը հասանելի լինի (կամ արտահայտություն արտածվի): |
wait_for() |
Պահում է արդյունքը նշված ժամանակահատվածում: Վերադարձնում է սպասման կարգավիճակ: |
wait_until() |
Պահում է արդյունքը մինչև նշված ժամանակային կետը: Վերադարձնում է սպասման կարգավիճակ: |
std::future մաս է <future> գրադարանի և տրամադրում է հարմար միջոց ասինխրոնային հաշվարկների արդյունքների կառավարելու համար, հեշտացնելով բազմահոսքային ծրագրերի մշակում։