尝试使用线程时出现错误

errors when trying to work with threads

本文关键字:错误 线程      更新时间:2023-10-16

大家好,希望一切都好。我正在尝试在c++中使用线程。我编译了代码,得到了以下错误消息。

C:UsersPeretzDocumentskeyloggerKeyConstants.h|183|warning: unknown escape sequence: '|' [enabled by default]|
C:UsersPeretzDocumentskeyloggerTimer.h|10|error: 'thread' in namespace 'std' does not name a type|
C:UsersPeretzDocumentskeyloggerTimer.h||In member function 'void Timer::SleepAndRun()':|
C:UsersPeretzDocumentskeyloggerTimer.h|25|error: 'std::this_thread' has not been declared|
C:UsersPeretzDocumentskeyloggerTimer.h||In member function 'void Timer::Start(bool)':|
C:UsersPeretzDocumentskeyloggerTimer.h|71|error: 'Thread' was not declared in this scope|
C:UsersPeretzDocumentskeyloggerTimer.h|71|error: 'thread' is not a member of 'std'|
C:UsersPeretzDocumentskeyloggerTimer.h||In member function 'void Timer::Stop()':|
C:UsersPeretzDocumentskeyloggerTimer.h|82|error: 'Thread' was not declared in this scope|
||=== Build failed: 5 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

我在Youtube上寻找c++和c++11中的线程,但找不到答案。请解释为什么会有这些错误。

#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

error: 'thread' in namespace 'std' does not name a type

无论您使用哪种编译器(看起来像Visual c++)都不支持std::thread(这是c++ 11的一部分)。