diff --git a/G940LEDControl/G940LEDControl.dproj b/G940LEDControl/G940LEDControl.dproj index df155fb..4e9058b 100644 --- a/G940LEDControl/G940LEDControl.dproj +++ b/G940LEDControl/G940LEDControl.dproj @@ -8,7 +8,7 @@ VCL 13.4 True - Debug + Release Win32 1 Application @@ -82,9 +82,10 @@ RELEASE;$(DCC_Define) + 1 1 0 - CompanyName=X²Software;FileDescription=G940 LED Control;FileVersion=1.0.0.0;InternalName=;LegalCopyright=© 2011 X²Software;LegalTrademarks=;OriginalFilename=G940LEDControl.exe;ProductName=G940 LED Control;ProductVersion=1.0;Comments= + CompanyName=X²Software;FileDescription=G940 LED Control;FileVersion=1.0.1.0;InternalName=;LegalCopyright=© 2011 X²Software;LegalTrademarks=;OriginalFilename=G940LEDControl.exe;ProductName=G940 LED Control;ProductVersion=1.0;Comments= 1033 $(BDS)\bin\default_app.manifest @@ -146,25 +147,6 @@ G940LEDControl.dpr - ExpressCoreLibrary by Developer Express Inc. - Express Cross Platform Library by Developer Express Inc. - ExpressPageControl by Developer Express Inc. - ExpressEditors Library by Developer Express Inc. - ExpressBars by Developer Express Inc. - ExpressBars Ribbon controls by Developer Express Inc. - ExpressScheduler by Developer Express Inc. - ExpressSkins Library by Developer Express Inc. - ExpressPrinting System by Developer Express Inc. - ExpressPivotGrid by Developer Express Inc. - ExpressOrgChart by Developer Express Inc. - ExpressSkins Library Uses Clause Auto Fill Helper by Developer Express Inc. - ExpressSkins Library Painter for PageControl by Developer Express Inc. - ExpressSkins Library Painter for Scheduler by Developer Express Inc. - ExpressSkins Library Painter for Bars by Developer Express Inc. - ExpressSkins Library Painter for NavBar by Developer Express Inc. - ExpressSkins Library Painter for Ribbon by Developer Express Inc. - ExpressSkins Library Painter for Docking Library by Developer Express Inc. - ExpressPrinting System ReportLink for ExpressLayoutControl by Developer Express Inc. ExpressEditors FieldLink by Developer Express Inc. ExpressBars DBNavigator by Developer Express Inc. ExpressBars extended DB items by Developer Express Inc. diff --git a/G940LEDControl/G940LEDControl.res b/G940LEDControl/G940LEDControl.res index b2c5061..b7f720a 100644 Binary files a/G940LEDControl/G940LEDControl.res and b/G940LEDControl/G940LEDControl.res differ diff --git a/G940LEDControl/Units/FSXSimConnectClient.pas b/G940LEDControl/Units/FSXSimConnectClient.pas index 25043a0..c919b38 100644 --- a/G940LEDControl/Units/FSXSimConnectClient.pas +++ b/G940LEDControl/Units/FSXSimConnectClient.pas @@ -51,10 +51,13 @@ const TM_ADDDEFINITION = 3001; TM_REMOVEDEFINITION = 3002; TM_TRYSIMCONNECT = 3003; + TM_PROCESSMESSAGES = 3004; TIMER_TRYSIMCONNECT = 201; + TIMER_PROCESSMESSAGES = 202; INTERVAL_TRYSIMCONNECT = 5000; + INTERVAL_PROCESSMESSAGES = 50; type @@ -87,11 +90,12 @@ type FDefinitions: TFSXSimConnectDefinitionMap; FLastDefinitionID: Cardinal; FSimConnectHandle: THandle; - FSimConnectDataEvent: TEvent; +// FSimConnectDataEvent: TEvent; protected procedure TMAddDefinition(var Msg: TOmniMessage); message TM_ADDDEFINITION; procedure TMRemoveDefinition(var Msg: TOmniMessage); message TM_REMOVEDEFINITION; procedure TMTrySimConnect(var Msg: TOmniMessage); message TM_TRYSIMCONNECT; + procedure TMProcessMessages(var Msg: TOmniMessage); message TM_PROCESSMESSAGES; procedure HandleSimConnectDataEvent; protected @@ -110,7 +114,7 @@ type property Definitions: TFSXSimConnectDefinitionMap read FDefinitions; property LastDefinitionID: Cardinal read FLastDefinitionID; property SimConnectHandle: THandle read FSimConnectHandle; - property SimConnectDataEvent: TEvent read FSimConnectDataEvent; +// property SimConnectDataEvent: TEvent read FSimConnectDataEvent; end; @@ -302,9 +306,9 @@ begin exit; FDefinitions := TFSXSimConnectDefinitionMap.Create; - FSimConnectDataEvent := TEvent.Create(nil, False, False, ''); - Task.RegisterWaitObject(SimConnectDataEvent.Handle, HandleSimConnectDataEvent); +// FSimConnectDataEvent := TEvent.Create(nil, False, False, ''); +// Task.RegisterWaitObject(SimConnectDataEvent.Handle, HandleSimConnectDataEvent); TrySimConnect; end; @@ -312,7 +316,7 @@ end; procedure TFSXSimConnectClient.Cleanup; begin - FreeAndNil(FSimConnectDataEvent); +// FreeAndNil(FSimConnectDataEvent); FreeAndNil(FDefinitions); if SimConnectHandle <> 0 then @@ -331,12 +335,14 @@ begin if InitSimConnect then begin - if SimConnect_Open(FSimConnectHandle, FSXSimConnectAppName, 0, 0, SimConnectDataEvent.Handle, 0) = S_OK then + if SimConnect_Open(FSimConnectHandle, FSXSimConnectAppName, 0, 0, 0 (*SimConnectDataEvent.Handle*), 0) = S_OK then begin TFSXSimConnectStateMonitor.SetCurrentState(scsConnected); Task.ClearTimer(TIMER_TRYSIMCONNECT); RegisterDefinitions; + + Task.SetTimer(TIMER_PROCESSMESSAGES, INTERVAL_PROCESSMESSAGES, TM_PROCESSMESSAGES); end; end; @@ -345,6 +351,7 @@ begin TFSXSimConnectStateMonitor.SetCurrentState(scsFailed); Task.SetTimer(TIMER_TRYSIMCONNECT, INTERVAL_TRYSIMCONNECT, TM_TRYSIMCONNECT); + Task.ClearTimer(TIMER_PROCESSMESSAGES); end; end; @@ -375,6 +382,7 @@ begin SIMCONNECT_RECV_ID_QUIT: begin FSimConnectHandle := 0; + Task.ClearTimer(TIMER_PROCESSMESSAGES); Task.SetTimer(TIMER_TRYSIMCONNECT, INTERVAL_TRYSIMCONNECT, TM_TRYSIMCONNECT); TFSXSimConnectStateMonitor.SetCurrentState(scsDisconnected); @@ -552,6 +560,12 @@ begin end; +procedure TFSXSimConnectClient.TMProcessMessages(var Msg: TOmniMessage); +begin + HandleSimConnectDataEvent; +end; + + { TFSXSimConnectDefinitionRef } constructor TFSXSimConnectDefinitionRef.Create(ADefinition: IFSXSimConnectDefinitionAccess); begin diff --git a/G940LEDControl/Units/FSXSimConnectStateMonitor.pas b/G940LEDControl/Units/FSXSimConnectStateMonitor.pas index 60e9aa4..483185f 100644 --- a/G940LEDControl/Units/FSXSimConnectStateMonitor.pas +++ b/G940LEDControl/Units/FSXSimConnectStateMonitor.pas @@ -90,17 +90,17 @@ var observer: IInterface; begin - CurrentStateLock.Acquire; - try - if Value <> FCurrentState then - begin + if Value <> FCurrentState then + begin + CurrentStateLock.Acquire; + try FCurrentState := Value; - - for observer in Observers do - (observer as IFSXSimConnectStateObserver).ObserverStateUpdate(CurrentState); + finally + CurrentStateLock.Release; end; - finally - CurrentStateLock.Release; + + for observer in Observers do + (observer as IFSXSimConnectStateObserver).ObserverStateUpdate(CurrentState); end; end; diff --git a/G940LEDControl/Units/LEDFunction.pas b/G940LEDControl/Units/LEDFunction.pas index 07ed8d3..546abaa 100644 --- a/G940LEDControl/Units/LEDFunction.pas +++ b/G940LEDControl/Units/LEDFunction.pas @@ -314,29 +314,24 @@ end; procedure TCustomLEDMultiStateFunctionWorker.SetCurrentState(AState: ILEDStateWorker; ANotifyObservers: Boolean); begin - FCurrentStateLock.Acquire; - try - if AState <> FCurrentState then - begin + if AState <> FCurrentState then + begin + FCurrentStateLock.Acquire; + try FCurrentState := AState; - - if ANotifyObservers then - NotifyObservers; + finally + FCurrentStateLock.Release; end; - finally - FCurrentStateLock.Release; + + if ANotifyObservers then + NotifyObservers; end; end; function TCustomLEDMultiStateFunctionWorker.GetCurrentState: ILEDStateWorker; begin - FCurrentStateLock.Acquire; - try - Result := FCurrentState; - finally - FCurrentStateLock.Release; - end; + Result := FCurrentState; end;