Skip to content

Commit

Permalink
Set time period
Browse files Browse the repository at this point in the history
  • Loading branch information
Chaosvex committed Oct 10, 2024
1 parent f93cab1 commit aee43b9
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/mangosd/WorldRunnable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "MapManager.h"
#include "BattleGroundMgr.h"
#include "Master.h"
#include "TimePeriod.h"

#include "Database/DatabaseEnv.h"

Expand All @@ -53,6 +54,9 @@ void WorldRunnable::operator()()
Master::ArmAnticrash();
uint32 anticrashRearmTimer = 0;

// Set the platform's timer period
const auto scoped_tp = set_time_period(std::chrono::milliseconds(1));

// Aim for WORLD_SLEEP_CONST update times
// If we update slower, update again immediately.
// If we update faster, then slow down!
Expand Down
2 changes: 2 additions & 0 deletions src/shared/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ set (shared_SRCS
Database/SQLStorageImpl.h
Multithreading/Messager.h
SRP6/SRP6.h
TimePeriod.h
nonstd/optional.hpp
ByteBuffer.cpp
Common.cpp
Expand Down Expand Up @@ -99,6 +100,7 @@ set (shared_SRCS
Database/SQLStorage.cpp
Multithreading/Messager.cpp
SRP6/SRP6.cpp
TimePeriod.cpp
)

if(USE_LIBCURL)
Expand Down
40 changes: 40 additions & 0 deletions src/shared/TimePeriod.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#include "TimePeriod.h"

#ifdef _WIN32
#include <Windows.h>
#pragma comment(lib, "Winmm.lib")
#endif

// That's right, this only does something on Windows
ScopedTimerPeriod set_time_period(const std::chrono::milliseconds ms)
{
#ifdef _WIN32
auto count = ms.count();
const auto result = timeBeginPeriod(count);

ScopedTimerPeriod sf(result == TIMERR_NOERROR, [count]
{
timeEndPeriod(count);
});

return sf;
#else
return { true, [] {} };
#endif
}
52 changes: 52 additions & 0 deletions src/shared/TimePeriod.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#ifndef _TIMEPERIOD_H
#define _TIMEPERIOD_H

#include <chrono>
#include <functional>
#include <utility>

/*
* Allows for setting the timer period, ensuring that
* it's reset to its original value when leaving scope
*/
class ScopedTimerPeriod final
{
public:
using Callback = std::function<void()>;

ScopedTimerPeriod(bool success, Callback cb): success_(success), cb_(std::move(cb)) {}

bool success() const
{
return success_;
}

~ScopedTimerPeriod()
{
cb_();
}

private:
Callback cb_;
bool success_;
};

ScopedTimerPeriod set_time_period(std::chrono::milliseconds ms);

#endif

0 comments on commit aee43b9

Please sign in to comment.