mirror of
				https://github.com/chibicitiberiu/rainmeter-studio.git
				synced 2024-02-24 04:33:31 +00:00 
			
		
		
		
	Tweaks
- Use InitializeCriticalSectionEx function with CRITICAL_SECTION_NO_DEBUG_INFO flag.
This commit is contained in:
		| @@ -29,8 +29,8 @@ static CRITICAL_SECTION g_CsLogDelay = {0}; | ||||
|  | ||||
| void InitalizeLitestep() | ||||
| { | ||||
| 	InitializeCriticalSection(&g_CsLog); | ||||
| 	InitializeCriticalSection(&g_CsLogDelay); | ||||
| 	CSystem::InitializeCriticalSection(&g_CsLog); | ||||
| 	CSystem::InitializeCriticalSection(&g_CsLogDelay); | ||||
| } | ||||
|  | ||||
| void FinalizeLitestep() | ||||
|   | ||||
| @@ -51,8 +51,6 @@ HWINEVENTHOOK CSystem::c_WinEventHook = NULL; | ||||
|  | ||||
| bool CSystem::c_ShowDesktop = false; | ||||
|  | ||||
| OSPLATFORM CSystem::c_Platform = OSPLATFORM_UNKNOWN; | ||||
|  | ||||
| std::wstring CSystem::c_WorkingDirectory; | ||||
|  | ||||
| std::vector<std::wstring> CSystem::c_IniFileMappings; | ||||
| @@ -102,8 +100,6 @@ void CSystem::Initialize(HINSTANCE instance) | ||||
| 	SetWindowPos(c_Window, HWND_BOTTOM, 0, 0, 0, 0, ZPOS_FLAGS); | ||||
| 	SetWindowPos(c_HelperWindow, HWND_BOTTOM, 0, 0, 0, 0, ZPOS_FLAGS); | ||||
|  | ||||
| 	SetOSPlatform(); | ||||
|  | ||||
| 	c_Monitors.monitors.reserve(4); | ||||
| 	SetMultiMonitorInfo(); | ||||
|  | ||||
| @@ -548,32 +544,34 @@ void CSystem::UpdateWorkareaInfo() | ||||
| ** Sets the OS platform. | ||||
| ** | ||||
| */ | ||||
| void CSystem::SetOSPlatform() | ||||
| OSPLATFORM CSystem::InitOSPlatform() | ||||
| { | ||||
| 	OSVERSIONINFOEX osvi = {sizeof(OSVERSIONINFOEX)}; | ||||
| 	if (GetVersionEx((OSVERSIONINFO*)&osvi)) | ||||
| 	{ | ||||
| 		if (osvi.dwMajorVersion == 5) | ||||
| 		switch (osvi.dwMajorVersion) | ||||
| 		{ | ||||
| 		case 5: | ||||
| 			// Not checking for osvi.dwMinorVersion >= 1 because Rainmeter won't run on pre-XP | ||||
| 			c_Platform = OSPLATFORM_XP; | ||||
| 		} | ||||
| 		else if (osvi.dwMajorVersion == 6) | ||||
| 		{ | ||||
| 			if (osvi.dwMinorVersion == 0) | ||||
| 			return OSPLATFORM_XP; | ||||
|  | ||||
| 		case 6: | ||||
| 			switch (osvi.dwMinorVersion) | ||||
| 			{ | ||||
| 				c_Platform = OSPLATFORM_VISTA; // Vista, Server 2008 | ||||
| 			case 0: | ||||
| 				return OSPLATFORM_VISTA; // Vista, Server 2008 | ||||
|  | ||||
| 			case 1: | ||||
| 				return OSPLATFORM_7; // 7, Server 2008R2 | ||||
|  | ||||
| 			default: | ||||
| 				return OSPLATFORM_8; // 8, Server 2012 | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				c_Platform = OSPLATFORM_7; // 7, Server 2008R2 | ||||
| 			} | ||||
| 		} | ||||
| 		else // newer OS | ||||
| 		{ | ||||
| 			c_Platform = OSPLATFORM_7; | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return OSPLATFORM_8;  // newer OS | ||||
| } | ||||
|  | ||||
| /* | ||||
| @@ -1119,6 +1117,28 @@ void CSystem::ResetWorkingDirectory() | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* | ||||
| ** Initializes a critical section object by using InitializeCriticalSectionEx function with CRITICAL_SECTION_NO_DEBUG_INFO flag. | ||||
| ** For more details: http://stackoverflow.com/questions/804848/critical-sections-leaking-memory-on-vista-win2008/ | ||||
| ** | ||||
| */ | ||||
| void CSystem::InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) | ||||
| { | ||||
| 	typedef BOOL (WINAPI * FPINITCRITEX)(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD Flags); | ||||
| 	static FPINITCRITEX InitializeCriticalSectionEx = (GetOSPlatform() >= OSPLATFORM_VISTA) ? | ||||
| 		(FPINITCRITEX)GetProcAddress(GetModuleHandle(L"Kernel32"), "InitializeCriticalSectionEx") : nullptr; | ||||
|  | ||||
| 	if (InitializeCriticalSectionEx) | ||||
| 	{ | ||||
| 		if (InitializeCriticalSectionEx(lpCriticalSection, 0, CRITICAL_SECTION_NO_DEBUG_INFO)) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	::InitializeCriticalSectionAndSpinCount(lpCriticalSection, 0); | ||||
| } | ||||
|  | ||||
| /* | ||||
| ** Sets clipboard text to given string. | ||||
| ** | ||||
|   | ||||
| @@ -24,10 +24,10 @@ | ||||
|  | ||||
| enum OSPLATFORM | ||||
| { | ||||
| 	OSPLATFORM_UNKNOWN = 0, | ||||
| 	OSPLATFORM_XP, | ||||
| 	OSPLATFORM_VISTA, | ||||
| 	OSPLATFORM_7 | ||||
| 	OSPLATFORM_7, | ||||
| 	OSPLATFORM_8 | ||||
| }; | ||||
|  | ||||
| struct MonitorInfo | ||||
| @@ -67,7 +67,7 @@ public: | ||||
| 	static HWND GetHelperWindow() { return c_HelperWindow; } | ||||
| 	static void PrepareHelperWindow(HWND WorkerW = GetWorkerW()); | ||||
|  | ||||
| 	static OSPLATFORM GetOSPlatform() { return c_Platform; } | ||||
| 	static OSPLATFORM GetOSPlatform() { static OSPLATFORM c_Platform = InitOSPlatform(); return c_Platform; } | ||||
| 	static ULONGLONG GetTickCount64(); | ||||
| 	static POINT GetCursorPosition(); | ||||
|  | ||||
| @@ -79,6 +79,7 @@ public: | ||||
|  | ||||
| 	static HMODULE RmLoadLibrary(LPCWSTR lpLibFileName, DWORD* dwError = NULL); | ||||
| 	static void ResetWorkingDirectory(); | ||||
| 	static void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); | ||||
|  | ||||
| 	static void SetClipboardText(const std::wstring& text); | ||||
| 	static void SetWallpaper(const std::wstring& wallpaper, const std::wstring& style); | ||||
| @@ -98,7 +99,7 @@ private: | ||||
| 	static void ClearMultiMonitorInfo() { c_Monitors.monitors.clear(); } | ||||
| 	static void UpdateWorkareaInfo(); | ||||
|  | ||||
| 	static void SetOSPlatform(); | ||||
| 	static OSPLATFORM InitOSPlatform(); | ||||
|  | ||||
| 	static HWND GetDefaultShellWindow(); | ||||
| 	static HWND GetWorkerW(); | ||||
| @@ -116,8 +117,6 @@ private: | ||||
|  | ||||
| 	static bool c_ShowDesktop; | ||||
|  | ||||
| 	static OSPLATFORM c_Platform; | ||||
|  | ||||
| 	static std::wstring c_WorkingDirectory; | ||||
|  | ||||
| 	static std::vector<std::wstring> c_IniFileMappings; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 spx
					spx