use boost::async instead of std::async as ~boost::async is nonblocking
This commit is contained in:
11
configure.ac
11
configure.ac
@@ -143,6 +143,17 @@ PKG_CHECK_MODULES([ICU], [icu-uc], [
|
||||
)
|
||||
], [[]])
|
||||
|
||||
dnl =============================
|
||||
dnl = checking for boost.thread =
|
||||
dnl =============================
|
||||
AC_DEFINE([BOOST_THREAD_VERSION], [3], [require boost.thread v3])
|
||||
AC_CHECK_HEADERS([boost/thread.hpp], ,
|
||||
AC_MSG_ERROR([boost/thread.hpp is missing or your boost version is too old (boost.thread v3 is required)])
|
||||
)
|
||||
AC_CHECK_LIB(boost_thread$BOOST_LIB_SUFFIX, main, LIBS="$LIBS -lboost_thread$BOOST_LIB_SUFFIX",
|
||||
AC_MSG_ERROR([no boost.thread library found])
|
||||
)
|
||||
|
||||
dnl ================================
|
||||
dnl = checking for various headers =
|
||||
dnl ================================
|
||||
|
||||
@@ -52,11 +52,8 @@ std::wstring Lastfm::title()
|
||||
|
||||
void Lastfm::update()
|
||||
{
|
||||
if (m_worker.valid()
|
||||
&& m_worker.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
|
||||
{
|
||||
if (m_worker.valid() && m_worker.is_ready())
|
||||
getResult();
|
||||
}
|
||||
}
|
||||
|
||||
void Lastfm::switchTo()
|
||||
@@ -85,5 +82,5 @@ void Lastfm::getResult()
|
||||
w.flush();
|
||||
w.refresh();
|
||||
// reset m_worker so it's no longer valid
|
||||
m_worker = std::future<LastFm::Service::Result>();
|
||||
m_worker = boost::BOOST_THREAD_FUTURE<LastFm::Service::Result>();
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <future>
|
||||
#include <boost/thread/future.hpp>
|
||||
#include <memory>
|
||||
|
||||
#include "interfaces.h"
|
||||
@@ -55,8 +55,9 @@ struct Lastfm: Screen<NC::Scrollpad>, Tabbable
|
||||
return;
|
||||
|
||||
m_service = std::shared_ptr<ServiceT>(service);
|
||||
m_worker = std::async(std::launch::async,
|
||||
std::bind(&LastFm::Service::fetch, m_service));
|
||||
m_worker = boost::async(
|
||||
boost::launch::async,
|
||||
std::bind(&LastFm::Service::fetch, m_service));
|
||||
|
||||
w.clear();
|
||||
w << "Fetching information...";
|
||||
@@ -70,7 +71,7 @@ private:
|
||||
std::wstring m_title;
|
||||
|
||||
std::shared_ptr<LastFm::Service> m_service;
|
||||
std::future<LastFm::Service::Result> m_worker;
|
||||
boost::BOOST_THREAD_FUTURE<LastFm::Service::Result> m_worker;
|
||||
};
|
||||
|
||||
extern Lastfm *myLastfm;
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <cerrno>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <thread>
|
||||
|
||||
#include "browser.h"
|
||||
#include "charset.h"
|
||||
@@ -213,7 +214,7 @@ void Lyrics::update()
|
||||
m_refresh_window = true;
|
||||
}
|
||||
|
||||
if (m_worker.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
|
||||
if (m_worker.is_ready())
|
||||
{
|
||||
auto lyrics = m_worker.get();
|
||||
if (lyrics)
|
||||
@@ -279,8 +280,8 @@ void Lyrics::fetch(const MPD::Song &s)
|
||||
else
|
||||
{
|
||||
m_shared_buffer = std::make_shared<Shared<NC::Buffer>>();
|
||||
m_worker = std::async(
|
||||
std::launch::async,
|
||||
m_worker = boost::async(
|
||||
boost::launch::async,
|
||||
std::bind(downloadLyrics, m_song, m_shared_buffer, m_fetcher));
|
||||
}
|
||||
}
|
||||
@@ -422,5 +423,5 @@ boost::optional<std::string> Lyrics::tryTakeConsumerMessage()
|
||||
void Lyrics::clearWorker()
|
||||
{
|
||||
m_shared_buffer.reset();
|
||||
m_worker = std::future<boost::optional<std::string>>();
|
||||
m_worker = boost::BOOST_THREAD_FUTURE<boost::optional<std::string>>();
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#define NCMPCPP_LYRICS_H
|
||||
|
||||
#include <boost/optional.hpp>
|
||||
#include <future>
|
||||
#include <boost/thread/future.hpp>
|
||||
#include <memory>
|
||||
#include <queue>
|
||||
|
||||
@@ -96,7 +96,7 @@ private:
|
||||
|
||||
MPD::Song m_song;
|
||||
LyricsFetcher *m_fetcher;
|
||||
std::future<boost::optional<std::string>> m_worker;
|
||||
boost::BOOST_THREAD_FUTURE<boost::optional<std::string>> m_worker;
|
||||
|
||||
Shared<ConsumerState> m_consumer_state;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user