Hello everybody hope all is well. I am trying to work with threads in c++. I compiled the code and got the following error messages.
C:\Users\Peretz\Documents\keylogger\KeyConstants.h|183|warning: unknown escape sequence: '\|' [enabled by default]|
C:\Users\Peretz\Documents\keylogger\Timer.h|10|error: 'thread' in namespace 'std' does not name a type|
C:\Users\Peretz\Documents\keylogger\Timer.h||In member function 'void Timer::SleepAndRun()':|
C:\Users\Peretz\Documents\keylogger\Timer.h|25|error: 'std::this_thread' has not been declared|
C:\Users\Peretz\Documents\keylogger\Timer.h||In member function 'void Timer::Start(bool)':|
C:\Users\Peretz\Documents\keylogger\Timer.h|71|error: 'Thread' was not declared in this scope|
C:\Users\Peretz\Documents\keylogger\Timer.h|71|error: 'thread' is not a member of 'std'|
C:\Users\Peretz\Documents\keylogger\Timer.h||In member function 'void Timer::Stop()':|
C:\Users\Peretz\Documents\keylogger\Timer.h|82|error: 'Thread' was not declared in this scope|
||=== Build failed: 5 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
I looked on Youtube for threads in c++ and threads in c++11 but could not find an answer. Please explain why there are these errors.
#ifndef TIMER_H
#define TIMER_H
#include <thread>
#include <chrono>
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
Thank you very much.
Aucun commentaire:
Enregistrer un commentaire