mercredi 28 septembre 2016

errors when trying to work with threads

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