diff --git a/configure.ac b/configure.ac index 0fb34099..f191f183 100644 --- a/configure.ac +++ b/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 ================================ diff --git a/src/lastfm.cpp b/src/lastfm.cpp index 3f35617a..b2ca1d8c 100644 --- a/src/lastfm.cpp +++ b/src/lastfm.cpp @@ -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(); + m_worker = boost::BOOST_THREAD_FUTURE(); } diff --git a/src/lastfm.h b/src/lastfm.h index 94cae36d..7604d683 100644 --- a/src/lastfm.h +++ b/src/lastfm.h @@ -23,7 +23,7 @@ #include "config.h" -#include +#include #include #include "interfaces.h" @@ -55,8 +55,9 @@ struct Lastfm: Screen, Tabbable return; m_service = std::shared_ptr(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 m_service; - std::future m_worker; + boost::BOOST_THREAD_FUTURE m_worker; }; extern Lastfm *myLastfm; diff --git a/src/lyrics.cpp b/src/lyrics.cpp index 49155ebd..7733294d 100644 --- a/src/lyrics.cpp +++ b/src/lyrics.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #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>(); - 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 Lyrics::tryTakeConsumerMessage() void Lyrics::clearWorker() { m_shared_buffer.reset(); - m_worker = std::future>(); + m_worker = boost::BOOST_THREAD_FUTURE>(); } diff --git a/src/lyrics.h b/src/lyrics.h index c2267f21..090f678a 100644 --- a/src/lyrics.h +++ b/src/lyrics.h @@ -22,7 +22,7 @@ #define NCMPCPP_LYRICS_H #include -#include +#include #include #include @@ -96,7 +96,7 @@ private: MPD::Song m_song; LyricsFetcher *m_fetcher; - std::future> m_worker; + boost::BOOST_THREAD_FUTURE> m_worker; Shared m_consumer_state; };