Boost线程无法使用类成员函数创建线程

时间:2015-03-31 14:38:17

标签: c++ multithreading boost compiler-errors boost-thread

解决 我尝试用类成员函数创建boost线程,但是我遇到了错误。我可以在C ++上这样做吗?我该如何解决?

源代码未满,因为它很长。

P.S。我的功能不带参数。我不会尝试使用线程指针。所以它不重复。

P.S.S我用scheduler_thread_test(scheduler::waiter_function);替换boost :: thread boost::thread scheduler_thread_test(&scheduler::waiter_function, this);时解决了这个问题 我明白为什么我需要'&'符号吗

平台:Linux amd64

scheduler.hpp

#ifndef SCHEDULER_H
#define SCHEDULER_H

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread.hpp>
#include <functional>
#include <vector>

namespace schelduler{
    using namespace schelduler;
    using namespace boost::posix_time;

    class scheduler{
        private:
            //std::vector<task_timepoint*> tasks;
            boost::thread *scheduler_thread;

            void waiter_function();
        public:
            void add_task(task_timepoint* task);
            scheduler();
    };
}
 #endif

scheduler.cpp

#include "scheduler.hpp"

using namespace schelduler;
using namespace boost::posix_time;


scheduler::scheduler()
{
    //this->scheduler_thread = new std::thread(this->waiter_function);
    boost::thread scheduler_thread_test(scheduler::waiter_function);
    this->scheduler_thread->detach();
}

制作日志:

Scanning dependencies of target Refregiration_Telemetry-Device
[ 50%] Building CXX object CMakeFiles/Refregiration_Telemetry-Device.dir/src/main.cpp.o
[100%] Building CXX object CMakeFiles/Refregiration_Telemetry-Device.dir/src/scheduler.cpp.o
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp: In constructor ‘schelduler::scheduler::scheduler()’:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: error: no matching function for call to ‘boost::thread::thread(<unresolved overloaded function type>)’
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidates are:
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:443:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> boost::thread::thread(F, A1, A2, A3, A4, A5, A6, A7, A8, A9)
         thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9):
         ^
/usr/include/boost/thread/detail/thread.hpp:443:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 10 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:436:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> boost::thread::thread(F, A1, A2, A3, A4, A5, A6, A7, A8)
         thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8):
         ^
/usr/include/boost/thread/detail/thread.hpp:436:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 9 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:429:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> boost::thread::thread(F, A1, A2, A3, A4, A5, A6, A7)
         thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7):
         ^
/usr/include/boost/thread/detail/thread.hpp:429:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 8 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:422:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6> boost::thread::thread(F, A1, A2, A3, A4, A5, A6)
         thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6):
         ^
/usr/include/boost/thread/detail/thread.hpp:422:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 7 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:415:9: note: template<class F, class A1, class A2, class A3, class A4, class A5> boost::thread::thread(F, A1, A2, A3, A4, A5)
         thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5):
         ^
/usr/include/boost/thread/detail/thread.hpp:415:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 6 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:408:9: note: template<class F, class A1, class A2, class A3, class A4> boost::thread::thread(F, A1, A2, A3, A4)
         thread(F f,A1 a1,A2 a2,A3 a3,A4 a4):
         ^
/usr/include/boost/thread/detail/thread.hpp:408:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 5 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:401:9: note: template<class F, class A1, class A2, class A3> boost::thread::thread(F, A1, A2, A3)
         thread(F f,A1 a1,A2 a2,A3 a3):
         ^
/usr/include/boost/thread/detail/thread.hpp:401:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 4 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:394:9: note: template<class F, class A1, class A2> boost::thread::thread(F, A1, A2)
         thread(F f,A1 a1,A2 a2):
         ^
/usr/include/boost/thread/detail/thread.hpp:394:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 3 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:388:9: note: template<class F, class A1> boost::thread::thread(F, A1, typename boost::disable_if<boost::thread_detail::is_convertible<F&, boost::thread_attributes>, boost::thread::dummy*>::type)
         thread(F f,A1 a1,typename disable_if<boost::thread_detail::is_convertible<F&,thread_attributes >, dummy* >::type=0):
         ^
/usr/include/boost/thread/detail/thread.hpp:388:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   candidate expects 3 arguments, 1 provided
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:337:9: note: boost::thread::thread(boost::thread&&)
         thread(BOOST_THREAD_RV_REF(thread) x)
         ^
/usr/include/boost/thread/detail/thread.hpp:337:9: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘boost::thread&&’
/usr/include/boost/thread/detail/thread.hpp:272:9: note: template<class F> boost::thread::thread(const attributes&, F&&)
         thread(attributes const& attrs, BOOST_THREAD_RV_REF(F) f):
         ^
/usr/include/boost/thread/detail/thread.hpp:272:9: note:   template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note:   cannot convert ‘((schelduler::scheduler*)this)->schelduler::scheduler::waiter_function’ (type ‘<unresolved overloaded function type>’) to type ‘const attributes& {aka const boost::thread_attributes&}’
     boost::thread scheduler_thread_test(scheduler::waiter_function);
                                                                   ^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:262:18: note: boost::thread::thread(F&&) [with F = void (schelduler::scheduler::*)()]
         explicit thread(BOOST_THREAD_RV_REF(F) f
                  ^
/usr/include/boost/thread/detail/thread.hpp:262:18: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘void (schelduler::scheduler::*&&)()’
/usr/include/boost/thread/detail/thread.hpp:246:9: note: boost::thread::thread()
         thread() BOOST_NOEXCEPT;
         ^
/usr/include/boost/thread/detail/thread.hpp:246:9: note:   candidate expects 0 arguments, 1 provided
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
                 from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:193:18: note: boost::thread::thread(boost::detail::thread_data_ptr)
         explicit thread(detail::thread_data_ptr data);
                  ^
/usr/include/boost/thread/detail/thread.hpp:193:18: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘boost::detail::thread_data_ptr {aka boost::shared_ptr<boost::detail::thread_data_base>}’
make[2]: *** [CMakeFiles/Refregiration_Telemetry-Device.dir/src/scheduler.cpp.o] Error 1
make[1]: *** [CMakeFiles/Refregiration_Telemetry-Device.dir/all] Error 2
make: *** [all] Error 2

0 个答案:

没有答案
相关问题