Hi all,

My code is somthing like the following:

Code:
//global
BOOL terminated;

BOOL APIENTRY DllMain(HANDLE hinst, DWORD  reason, LPVOID lpReserved)
{
	if (reason == DLL_PROCESS_ATTACH)
	{
		//starting
		DisableThreadLibraryCalls((HINSTANCE)hinst);
		terminated = FALSE;
		thread_handle = CreateThread(NULL, 0, run_thread, 0, CREATE_SUSPENDED, &thread_id);
		SetThreadPriority(thread_handle, THREAD_PRIORITY_HIGHEST);
		ResumeThread(thread_handle);
	}

	if (reason == DLL_PROCESS_DETACH)
	{
		if (lpReserved != NULL)
			log_log(LOG_CRITICAL, "DllMain", "plugin exception error, terminated");

		//ending
		terminated = TRUE;
	}

	return 1;
}
//---------------------------------------------------------------------------
DWORD __stdcall run_thread(LPVOID lparam)
{
	//setup the log
	log_start("thingie");

	//init timers
	timer_calibrate();	

	//start main thread loop
	while (terminated == FALSE)
	{
		//do stuff here
		timer_lazysleep(0.020);
	}

	//stop logging
	log_end();

	//done
	FreeLibraryAndExitThread((HMODULE)lparam, 0);

	return 0;
}
Is this the correct way to shutdown a thread on calling FreeLibrary() from the app that loaded the DLL?

Im guessing its not, due to using the "terminated" global var, but i cant think of how it should be done properly.

Thanks.