pull/261/merge
Chuck Ries 2 years ago committed by GitHub
commit a72c4f4bb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 43
      olcPixelGameEngine.h

@ -896,6 +896,7 @@ namespace olc
virtual ~Platform() = default;
virtual olc::rcode ApplicationStartUp() = 0;
virtual olc::rcode ApplicationCleanUp() = 0;
virtual olc::rcode SetThreadName(const std::string&) = 0;
virtual olc::rcode ThreadStartUp() = 0;
virtual olc::rcode ThreadCleanUp() = 0;
virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) = 0;
@ -3405,6 +3406,8 @@ namespace olc
void PixelGameEngine::EngineThread()
{
platform->SetThreadName("OLC PGE Engine Thread");
// Allow platform to do stuff here if needed, since its now in the
// context of this thread
if (platform->ThreadStartUp() == olc::FAIL) return;
@ -4952,6 +4955,33 @@ namespace olc
public:
virtual olc::rcode ApplicationStartUp() override { return olc::rcode::OK; }
virtual olc::rcode ApplicationCleanUp() override { return olc::rcode::OK; }
virtual olc::rcode SetThreadName(const std::string& s)
{
// Reference:
// https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-set-a-thread-name-in-native-code?view=vs-2019#set-a-thread-name-by-throwing-an-exception
#pragma pack(push, 8)
struct THREADNAME_INFO
{
DWORD dwType;
LPCSTR szName;
DWORD dwThreadID;
DWORD dwFlags;
};
#pragma pack(pop)
THREADNAME_INFO info{ 0x1000, s.c_str(), 0xFFFFFFFF, 0 };
__try
{
RaiseException(0x406D1388, 0, sizeof(info) / sizeof(ULONG_PTR), reinterpret_cast<ULONG_PTR*>(&info));
}
__except(EXCEPTION_CONTINUE_EXECUTION) { }
return olc::rcode::OK;
}
virtual olc::rcode ThreadStartUp() override { return olc::rcode::OK; }
virtual olc::rcode ThreadCleanUp() override
@ -5154,6 +5184,11 @@ namespace olc
return olc::rcode::OK;
}
virtual olc::rcode SetThreadName(const std::string&) override
{
return olc::rcode::OK;
}
virtual olc::rcode ThreadStartUp() override
{
return olc::rcode::OK;
@ -5404,6 +5439,11 @@ namespace olc {
return olc::rcode::OK;
}
virtual olc::rcode SetThreadName(const std::string&) override
{
return olc::rcode::OK;
}
virtual olc::rcode ThreadStartUp() override
{
return olc::rcode::OK;
@ -5721,6 +5761,9 @@ namespace olc
virtual olc::rcode ApplicationCleanUp() override
{ ThreadCleanUp(); return olc::rcode::OK; }
virtual olc::rcode SetThreadName(const std::string&)
{ return olc::rcode::OK; }
virtual olc::rcode ThreadStartUp() override
{ return olc::rcode::OK; }

Loading…
Cancel
Save