2016-09-28 9 views
-1

こんにちは皆、すべてがうまくいくことを願っています。私はC++のスレッドで作業しようとしています。私はコードをコンパイルし、次のエラーメッセージを受け取りました。スレッドで作業しようとするとエラーが発生する

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)) ===| 

私は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 

ありがとうございました。あなたが使用しているどのコンパイラ

+4

コンパイラでC++ 11をオンにしましたか? – NathanOliver

+1

これを実行するコマンドは? ... – amanuel2

+0

また、 'std :: function'をサポートするために' #include 'を追加してください。 –

答えて

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

(ビジュアルC++のように見えます)(C++ 11の一部である)std::threadをサポートしていません。

関連する問題