使用BOOST库 多线程ThreadPool 编译错误”TIME_UTC was not declared in this scope”

  • Post author:
  • Post category:其他


转载 : https://blog.csdn.net/ydyang1126/article/details/51434265

https://github.com/vpython/visual/issues/3


原因:


boost版本在1.50后,将该TIME_UTC这个名字修改为TIME_UTC_,


只需要将task_adaptors.hpp中的TIME_UTC修改为boost::TIME_UTC_即可.



修改名字的原因是C++ 11定义了TIME_UTC这个宏,为了避免冲突需要作此修改。





boost::TIME_UTC

has been renamed to

boost::TIME_UTC_

in Boost 1.50:


https://svn.boost.org/trac/boost/ticket/6940



https://svn.boost.org/trac/boost/changeset/78802

Errors during compilation of Visual with Boost 1.50:

In file included from ../dependencies/threadpool/include/threadpool/detail/pool_core.hpp:31:0,
                 from ../dependencies/threadpool/include/threadpool/pool.hpp:27,
                 from ../dependencies/threadpool/include/threadpool.hpp:21,
                 from ./core/util/render_manager.cpp:3:
../dependencies/threadpool/include/threadpool/detail/../task_adaptors.hpp: In member function ‘void boost::threadpool::looped_task_func::operator()() const’:
../dependencies/threadpool/include/threadpool/detail/../task_adaptors.hpp:138:26: error: ‘TIME_UTC’ was not declared in this scope
../dependencies/threadpool/include/threadpool/detail/../task_adaptors.hpp:149:28: error: ‘TIME_UTC’ was not declared in this scope

This patch fixes compilation:

--- dependencies/threadpool/include/threadpool/task_adaptors.hpp
+++ dependencies/threadpool/include/threadpool/task_adaptors.hpp
@@ -135,7 +135,11 @@
         if(m_break_s > 0 || m_break_ns > 0)
         { // Sleep some time before first execution
           xtime xt;
+#if BOOST_VERSION >= 105000
+          xtime_get(&xt, TIME_UTC_);
+#else
           xtime_get(&xt, TIME_UTC);
+#endif
           xt.nsec += m_break_ns;
           xt.sec += m_break_s;
           thread::sleep(xt); 
@@ -146,7 +150,11 @@
           if(m_break_s > 0 || m_break_ns > 0)
           {
             xtime xt;
+#if BOOST_VERSION >= 105000
+            xtime_get(&xt, TIME_UTC_);
+#else
             xtime_get(&xt, TIME_UTC);
+#endif
             xt.nsec += m_break_ns;
             xt.sec += m_break_s;
             thread::sleep(xt);