本文整理汇总了C++中std::future::get方法的典型用法代码示例。如果您正苦于以下问题:C++ future::get方法的具体用法?C++ future::get怎么用?C++ future::get使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类std::future
的用法示例。
在下文中一共展示了future::get方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: check_for_computed_move
void GoApp::check_for_computed_move()
{
//return;
if (game_status != COMPUTER_THINKING) {
return;
}
auto status = computed_move.wait_for(std::chrono::seconds(0));
if (status == std::future_status::ready) {
try {
auto move = computed_move.get();
state.do_move(move);
// Are there any more moves possible?
if (state.get_moves().empty()) {
game_status = GAME_OVER;
}
else {
next_player();
}
} catch (std::exception& error) {
game_status = GAME_ERROR;
error_string = error.what();
}
}
}
示例2: factorial1
int factorial1(std::future<int>& f)
{
int n = f.get();
int result = 1;
for (int i = 1; i <= n; ++i)
result *= i;
return result;
}
示例3: close
/**
* Close the task. This will raise in this thread any exception the
* task generated in the other thread. Calling this function is
* optional, because the destructor will also call this function.
* But because it can throw an exception, it is better to call it
* explicitly.
*/
void close() {
// If an exception happened in the task, re-throw
// it in this thread. This will block if the task
// isn't finished.
if (m_future.valid()) {
m_future.get();
}
// Make sure task is done.
if (m_thread.joinable()) {
m_thread.join();
}
}
示例4: handleFuture
void handleFuture( std::future< _2Real::BlockResult > &obj, std::string const& info = "" )
{
obj.wait();
_2Real::BlockResult val = obj.get();
switch ( val )
{
case _2Real::BlockResult::CARRIED_OUT:
std::cout << "---- " << info << " was carried out" << std::endl;
break;
case _2Real::BlockResult::IGNORED:
std::cout << "---- " << info << " was ignored" << std::endl;
break;
}
}
示例5: getResult
std::pair<long double, int> getResult(
std::chrono::system_clock::time_point deadline, int maxPrecision)
{
long double result = 1;
int precision = 1;
if (std::chrono::system_clock::now() < deadline) {
while (precision < maxPrecision) {
const int nextPrecision = std::min(maxPrecision, precision * 2);
future = std::async(std::launch::async, compute, nextPrecision);
if (future.wait_until(deadline) == std::future_status::timeout)
break;
result = future.get();
precision = nextPrecision;
}
}
return { result, precision };
}
示例6: io_error
/**
* Get the header data from the file.
*
* @returns Header.
* @throws Some form of osmium::io_error if there is an error.
*/
osmium::io::Header header() {
if (m_status == status::error) {
throw io_error("Can not get header from reader when in status 'error'");
}
try {
if (m_header_future.valid()) {
m_header = m_header_future.get();
if (m_read_which_entities == osmium::osm_entity_bits::nothing) {
m_status = status::eof;
}
}
} catch (...) {
close();
m_status = status::error;
throw;
}
return m_header;
}
示例7: NotifyResult
//========================================================================
void CSirServer::NotifyResult(CLIENT* client, std::future<SCRESULT>& result)
{
SCRESULT rc = result.get();
stringstream ss;
switch (rc)
{
case SCR_SUCCESS:
ss << "OK";
break;
case SCR_TIMEOUT:
ss << "TIMEOUT";
break;
default:
ss << "ERROR";
break;
}
ss << std::endl;
Notify(client, ss.str());
}
示例8: on_update
void on_update(const UpdateEvent & e) override
{
// Around 60 fps
if (fixedTimer.milliseconds().count() >= 16 && turret.fired)
{
float timestep_ms = fixedTimer.milliseconds().count() / 1000.f;
turret.projectile.fixed_update(timestep_ms);
std::cout << timestep_ms << std::endl;
//std::cout << turret.projectile.p.position << std::endl;
fixedTimer.reset();
}
cameraController.update(e.timestep_ms);
time += e.timestep_ms;
shaderMonitor.handle_recompile();
// If a new mesh is ready, retrieve it
if (pointerFuture.valid())
{
auto status = pointerFuture.wait_for(std::chrono::seconds(0));
if (status != std::future_status::timeout)
{
auto m = pointerFuture.get();
supershape = m;
supershape.pose.position = {0, 2, -2};
pointerFuture = {};
}
}
// If we don't currently have a background task, begin working on the next mesh
if (!pointerFuture.valid() && regeneratePointer)
{
pointerFuture = std::async([]() {
return make_supershape_3d(16, ssM, ssN1, ssN2, ssN3);
});
}
}
示例9: assert
TEST_F(DBusConnectionTest, LibdbusConnectionsMayCommitSuicide) {
const ::DBusBusType libdbusType = ::DBusBusType::DBUS_BUS_SESSION;
::DBusError libdbusError;
dbus_error_init(&libdbusError);
::DBusConnection* libdbusConnection = dbus_bus_get_private(libdbusType, &libdbusError);
assert(libdbusConnection);
dbus_connection_set_exit_on_disconnect(libdbusConnection, false);
auto dispatchThread = std::thread(&dispatch, libdbusConnection);
::DBusMessage* libdbusMessageCall = dbus_message_new_method_call(
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus",
"ListNames");
dbus_message_set_signature(libdbusMessageCall, "");
DBusPendingCall* libdbusPendingCall;
dbus_connection_send_with_reply(
libdbusConnection,
libdbusMessageCall,
&libdbusPendingCall,
500);
dbus_pending_call_set_notify(
libdbusPendingCall,
notifyThunk,
libdbusConnection,
NULL);
ASSERT_EQ(true, future.get());
dispatchThread.join();
}
示例10:
BOOST_AUTO_TEST_CASE(future, *boost::unit_test::timeout(15))
{
using boost::unit_test::framework::master_test_suite;
boost::asio::io_context ios;
std::future<int> fut = bp::async_system(
ios, boost::asio::use_future,
master_test_suite().argv[1],
"test", "--exit-code", "42");
ios.run();
int exit_code = 0;
BOOST_CHECK_NO_THROW(exit_code = fut.get());
BOOST_CHECK_EQUAL(exit_code, 42);
}
BOOST_AUTO_TEST_CASE(future_error, *boost::unit_test::timeout(15))
{
using boost::unit_test::framework::master_test_suite;
boost::asio::io_context ios;
std::future<int> fut = bp::async_system(
ios, boost::asio::use_future,
"invalid-command");
ios.run();
示例11: getNum2
// return from thread
int getNum2(std::future<int> &f) {
print("In getNum1");
return f.get() + 10;
}
示例12: check_for_exception
/**
* Check task for exceptions.
*
* If an exception happened in the task, re-throw it in this
* thread. This will not do anything if there was no exception.
*/
void check_for_exception() {
if (m_future.valid() && m_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready) {
m_future.get();
}
}
示例13: test
void test(std::future<int>& input) {
std::cout << input.get() << std::endl;
}
示例14: wait_until_done
inline void wait_until_done(std::future<T>& future) {
if (future.valid()) {
future.get();
}
}
示例15: check_for_exception
inline void check_for_exception(std::future<T>& future) {
if (future.valid() && future.wait_for(std::chrono::seconds(0)) == std::future_status::ready) {
future.get();
}
}