C++ 定时器工作不正常

C++ 定时器工作不正常,c++,timer,sdl,C++,Timer,Sdl,基于SDL计时器的计时器类有问题 class CTimer { public: CTimer(): startTick(0), endTick(0), curTime(0), running(false) {}; void Start() { startTick += SDL_GetTicks() - endTick; running = true; }; void Stop() { endTick = SDL_GetTicks(); running = fals

基于SDL计时器的计时器类有问题

class CTimer
{
    public:
    CTimer(): startTick(0), endTick(0), curTime(0), running(false) {};
    void Start() { startTick += SDL_GetTicks() - endTick; running = true; };
    void Stop() { endTick = SDL_GetTicks(); running = false; };
    void Reset() { startTick = 0; endTick = 0; curTime = 0; };
    inline int operator()() { return running ? curTime = ((int) SDL_GetTicks - startTick) / 1000 + 1 : curTime; };
    private:
    int startTick;
    int endTick;
    int curTime;
    bool running;
};
()运算符应以秒为单位返回时间(存储在curTime中)。但它总是返回4202(curTime总是等于这个值)。我做错了什么

测试代码:

int main()
{
    SDL_Init (SDL_INIT_TIMER);
    CApp::CTimer timer;
    timer.Start();
    for (int i = 0; i < 15; ++i)
    {
        SDL_Delay (1000);
        std::cout << timer() << '\n';
    }
    return 0;
}
intmain()
{
SDL_Init(SDL_Init_计时器);
计算机定时器;
timer.Start();
对于(int i=0;i<15;++i)
{
SDL_延迟(1000);

std::cout您是否缺少SDL_GetTicks的括号

inline int operator()() { return running ? curTime = ((int) SDL_GetTicks - startTick) / 1000 + 1 : curTime; };

您是否缺少SDL_GetTicks的括号

inline int operator()() { return running ? curTime = ((int) SDL_GetTicks - startTick) / 1000 + 1 : curTime; };
首先

inline int operator()() { return running ? curTime = 
    ((int) SDL_GetTicks - startTick) / 1000 + 1 : curTime; };
应该是

inline int operator()() { return running ? curTime = 
    ((int) SDL_GetTicks() - startTick) / 1000 + 1 : curTime; };
我想

您是否收到有关此的警告错误?

首先

inline int operator()() { return running ? curTime = 
    ((int) SDL_GetTicks - startTick) / 1000 + 1 : curTime; };
应该是

inline int operator()() { return running ? curTime = 
    ((int) SDL_GetTicks() - startTick) / 1000 + 1 : curTime; };
我想


你是否对此有一个警告错误?

< P>这是为什么你不想在C++中使用旧风格的C类的一个很好的例子。
(int) SDL_GetTicks

函数调用中缺少的括号意味着将函数的指针转换为int,而不是返回值。令人惊讶的是,函数的指针永远不会改变。

< P>这是为什么不希望在C++中使用旧样式C类的一个很好的例子。
(int) SDL_GetTicks

函数调用中缺少的括号表示您正在将指向函数的指针强制转换为int,而不是返回值。令人惊讶的是,指向函数的指针从未更改。

除了尝试调用
SDL\u GetTicks
而不是
SDL\u GetTicks()
导致它获取该函数的地址之外(并且总是按照观察结果返回常量),如果在调用
operator()
之前调用
Start
,然后调用
Stop
,则不会得到有意义的结果。

除了尝试调用
SDL\u GetTicks
而不是
SDL\u GetTicks()
使其获取该函数的地址(并始终返回您观察到的常量),如果您在调用
操作符()之前调用
Start
,然后调用
Stop
,则不会得到有意义的结果。

我明白了。因此,编译器警告被看到并丢弃:-(我的mingw没有显示任何警告。我不会在未来的代码中使用任何c-cast。谢谢。我明白了。因此编译器警告被看到并丢弃:-(我的mingw没有显示任何警告。我不会在未来的代码中使用任何c-cast。谢谢。