C++ 定时器工作不正常
基于SDL计时器的计时器类有问题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
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。谢谢。