我正在关注Udemy课程,但代码不起作用

时间:2017-08-26 10:11:38

标签: c++ stdthread

C:\Users\hp\Desktop\Timer.h|77|error: no matching function for call to 
'std::thread::thread(<unresolved overloaded function type>, Timer* const)'|

这是我在尝试构建时遇到的错误,我正在学习Udemy课程,我对C ++知之甚少,如果有人可以帮助感谢! 此外,整个项目的代码可以在github上找到:https://github.com/creator69/keylogger-

它给出错误的代码:

#ifndef TIMER_H
#define TIMER_H

#include <chrono>
#include <thread>

class Timer {

    std::thread Thread;

    bool Alive = false;

    long CallNumber = -1L;

    long repeat_count = -1L;

    std::chrono::milliseconds interval = std::chrono::milliseconds(0);

    std::function<void(void)> funct = nullptr;

    void SleepAndRun() {

        std::this_thread::sleep_for(interval);
        if (Alive)
            Function()();
    }

    void ThreadFunc() {

        if (CallNumber == Infinite)
            while (Alive)
                SleepAndRun();
        else

            while (repeat_count--)
                SleepAndRun();
    }

  public:
    static const long Infinite = -1L;

    Timer() {}

    Timer(const std::function<void(void)> &f) : funct(f) {}

    Timer(const std::function<void(void)> &f, const unsigned long &i, const long repeat = Timer::Infinite)
            : funct(f), interval(std::chrono::milliseconds(i)), CallNumber(repeat) {}

    void Start(bool Async = true) {

        if (IsAlive())
            return;

        Alive = true;

        repeat_count = CallNumber;

        if (Async)
            Thread = std::thread(ThreadFunc, this);
        else
            this->ThreadFunc();
    }

    void Stop() {

        Alive = false;

        Thread.join();
    }
    void SetFunction(const std::function<void(void)> &f) { funct = f; }
    bool IsAlive() const { return Alive; }
    void RepeatCount(const long r) {

        if (Alive)
            return;
        CallNumber = r;
    }

    long GetLeftCount() const { return repeat_count; }

    long RepeatCount() const { return CallNumber; }
    void SetInterval(const unsigned long &i) {

        if (Alive)
            return;
        ;

        interval = std::chrono::milliseconds(i);
    }

    unsigned long Interval() const { return interval.count(); }

    const std::function<void(void)> &Function() const { return funct; }
};

#endif

1 个答案:

答案 0 :(得分:0)

Thread = std::thread(ThreadFunc, this);

将指向成员函数的指针传递给std::thread的构造函数的正确方法是:

Thread = std::thread(&Timer::ThreadFunc, this);