static void PolicyThread() { Int64 NextRunTime = RegistryData.LastSyncPolicies; Int64 CurrentTime; while (StopThreads == false) { CurrentTime = CommonUtilities.DTtoINT(DateTime.Now); if (InvokePolicy == true) { InvokePolicy = false; NextRunTime = CommonUtilities.DTtoINT(DateTime.Now.AddMinutes(-1)); } if (CurrentTime < NextRunTime) { Thread.Sleep(1000); continue; } lock (LockLock3) { if (LockPolicyUpdate == true) { Thread.Sleep(1000); continue; } LockPolicyUpdate = true; } try { SyncPolicy.DoSyncPolicy(); #region Prevent criss cross with reportings wait until done! do { lock (LockLock1) { if (LockReportingUpdate1 == true) { if (StopThreads == true) { LockReportingUpdate1 = false; break; } Thread.Sleep(1000); continue; } LockReportingUpdate1 = true; break; } } while (true); #endregion if (StopThreads == false) { SyncPolicy.ApplyPolicy(SyncPolicy.ApplyPolicyFunction.ApplySystem); } #region Prevent criss cross with reportings wait until done! lock (LockLock1) { LockReportingUpdate1 = false; } #endregion } catch (Exception ee) { Debug.WriteLine(ee.ToString()); FoxEventLog.WriteEventLog("Servere error while syncing / applying policies: " + ee.ToString(), EventLogEntryType.Error); } Int64 Tim = RegistryData.LastSyncPoliciesWaitTime; if (Tim < 1) { Tim = 5; } NextRunTime = CommonUtilities.DTtoINT(DateTime.Now.AddMinutes(Tim)); RegistryData.LastSyncPolicies = NextRunTime; lock (LockLock3) { LockPolicyUpdate = false; } } }