本文整理汇总了C++中std::future类的典型用法代码示例。如果您正苦于以下问题:C++ future类的具体用法?C++ future怎么用?C++ future使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了future类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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();
}
}
}
开发者ID:CatalinTiseanu,项目名称:monte-carlo-tree-search,代码行数:28,代码来源:go.cpp
示例2: StopHTTPServer
void StopHTTPServer()
{
LogPrint(BCLog::HTTP, "Stopping HTTP server\n");
if (workQueue) {
LogPrint(BCLog::HTTP, "Waiting for HTTP worker threads to exit\n");
workQueue->WaitExit();
delete workQueue;
workQueue = nullptr;
}
if (eventBase) {
LogPrint(BCLog::HTTP, "Waiting for HTTP event thread to exit\n");
// Give event loop a few seconds to exit (to send back last RPC responses), then break it
// Before this was solved with event_base_loopexit, but that didn't work as expected in
// at least libevent 2.0.21 and always introduced a delay. In libevent
// master that appears to be solved, so in the future that solution
// could be used again (if desirable).
// (see discussion in https://github.com/bitcoin/bitcoin/pull/6990)
if (threadResult.valid() && threadResult.wait_for(std::chrono::milliseconds(2000)) == std::future_status::timeout) {
LogPrintf("HTTP event loop did not exit within allotted time, sending loopbreak\n");
event_base_loopbreak(eventBase);
}
threadHTTP.join();
}
if (eventHTTP) {
evhttp_free(eventHTTP);
eventHTTP = 0;
}
if (eventBase) {
event_base_free(eventBase);
eventBase = 0;
}
LogPrint(BCLog::HTTP, "Stopped HTTP server\n");
}
开发者ID:Crinklebine,项目名称:bitcoin,代码行数:33,代码来源:httpserver.cpp
示例3: IsReady
static bool IsReady(std::future<void>& future)
{
#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6))
return future.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
#else
return future.wait_for(std::chrono::seconds(0));
#endif
}
开发者ID:arrrrrrr,项目名称:ebftpd,代码行数:8,代码来源:futureminder.hpp
示例4: 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();
}
}
开发者ID:natsumiirimura,项目名称:libosmium,代码行数:20,代码来源:checked_task.hpp
示例5: 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;
}
}
开发者ID:cadet,项目名称:_2RealFramework,代码行数:14,代码来源:BasicBlocksAndCustomTypes.cpp
示例6: 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 };
}
开发者ID:CCJY,项目名称:coliru,代码行数:17,代码来源:main.cpp
示例7: interruptible_wait
void interruptible_wait(std::future<T>& uf)
{
while (!this_thread_interrupt_flag.is_set())
{
if (uf.wait_for(lk, std::future_status::ready == std::chrono::milliseconds(1)))
break;
}
}
开发者ID:DevStarSJ,项目名称:Study,代码行数:8,代码来源:ch.09.02.05.handling_interrupt.cpp
示例8: GetTimePerMove
void AI::WaitForFuture(const std::future<void>& fut, bool bPondering)
{
std::uint64_t timePerMove = GetTimePerMove();
if(bPondering)
{
timePerMove /= 2;
}
// Wait until the thread finishes or it gets timed out
if(fut.wait_for(std::chrono::nanoseconds(timePerMove)) == std::future_status::timeout)
{
// If the thread did not finish execution, signal the thread to exit, and wait till the thread exits.
m_bStopMinimax = true;
fut.wait();
m_bStopMinimax = false;
}
}
开发者ID:BryceMehring,项目名称:Chess,代码行数:18,代码来源:AI.cpp
示例9: 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;
}
开发者ID:zhugp125,项目名称:C_C_plus_plus,代码行数:9,代码来源:main.cpp
示例10: test
void test(std::future<void> fut)
{
switch (fut.wait_for(std::chrono::milliseconds(500)))
{
case std::future_status::ready: std::cout << "ready\n"; break;
case std::future_status::deferred: std::cout << "deferred\n"; break;
case std::future_status::timeout: std::cout << "timeout\n"; break;
};
}
开发者ID:CCJY,项目名称:coliru,代码行数:9,代码来源:main.cpp
示例11: while
//----------------------------------------------------------------------//
void SoftServo::threadFunc(std::future<bool> shutdown,
SoftServo *const servo) // change this in the future to use a thread safe shared pipe reader/writer
{
while (shutdown.wait_for(std::chrono::nanoseconds(0)) !=
std::future_status::ready)
{
servo->updateMove();
}
}
开发者ID:Gregory119,项目名称:Robotics,代码行数:10,代码来源:ctrl_softservo.cpp
示例12: 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;
}
开发者ID:7ute,项目名称:osrm-backend,代码行数:25,代码来源:reader.hpp
示例13: checkIfFinished
static bool checkIfFinished(std::future<void>& match) {
auto status = match.wait_for(std::chrono::seconds(0));
if(status == std::future_status::timeout) {
return false;
}
else if(status == std::future_status::ready) {
return true;
}
else {
return false;
}
}
开发者ID:kamszyc,项目名称:checkers-server,代码行数:12,代码来源:MatchHandler.cpp
示例14: while
//----------------------------------------------------------------------//
void JoyStick::threadFunc(std::future<bool> shutdown,
const JoyStick *const js)
{
while (shutdown.wait_for(std::chrono::nanoseconds(0)) !=
std::future_status::ready)
{
if (!js->readEvent())
{
js->d_owner->handleReadError();
}
}
}
开发者ID:Gregory119,项目名称:Robotics,代码行数:13,代码来源:djs_joystick.cpp
示例15: 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);
});
}
}
开发者ID:ddiakopoulos,项目名称:sandbox,代码行数:37,代码来源:geometric_algo_dev.hpp
示例16: 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());
}
开发者ID:swarga-research,项目名称:sircond,代码行数:24,代码来源:sirserver.cpp
示例17: 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();
}
开发者ID:Pelagicore,项目名称:common-api-dbus-runtime,代码行数:36,代码来源:DBusConnectionTest.cpp
示例18: is_ready
bool is_ready(std::future<R> const& f) {
return f.wait_for(std::chrono::microseconds(0)) == std::future_status::ready;
}
开发者ID:KjellKod,项目名称:concurrent,代码行数:3,代码来源:concurrent.hpp
示例19: schedule
void schedule(std::weak_ptr<Mailbox>) final {
promise.set_value();
future.wait();
std::this_thread::sleep_for(1ms);
waited = true;
}
开发者ID:1SpatialGroupLtd,项目名称:mapbox-gl-native,代码行数:6,代码来源:actor.test.cpp
示例20: wait
void wait() {
promise.set_value();
future.wait();
std::this_thread::sleep_for(1ms);
waited = true;
}
开发者ID:1SpatialGroupLtd,项目名称:mapbox-gl-native,代码行数:6,代码来源:actor.test.cpp
注:本文中的std::future类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论