Search the Community
Showing results for tags 'setthreaddatafactory'.
Found 2 results
-
setthreaddatafactory Passing parameter to ThreadDataFactory
PatV posted a topic in OmniThreadLibrary
Delphi 10.3 Omnithead 3.07.5 Hi All, I'm just a little lost, I would like to pass parameters to the data factory, I know I can pass function like this TOTPThreadDataFactoryFunction = function: IInterface; TOTPThreadDataFactoryMethod = function: IInterface of object; and my function is like {-------------------------------------------------------------------------------------------------} function TFConfig.CreateThreadPool(aHandle : THandle ; aConfig : rConnectionConfig ; aValue: string) : iOmniThreadPool; var iOmniValue : TOmniValue; begin iOmniValue := TOmniValue.FromRecord<rConnectionConfig>(aconfig); result := otlThreadPool.CreateThreadPool(aValue); result.MaxExecuting := result.NumCores; result.SetThreadDataFactory ( (function (aHandle : THandle ; aConfig : TOmniValue) : IInterface begin result:=Function : IInterface begin result:= ?? end; end )(aHandle,iOmniValue ) ); end; {-------------------------------------------------------------------------------------------------} rConnectionConfig is a record containing info on to be able to connect to the datamodule RConnectionConfig = record User : string; Password : string; Database : string; Protocol : string; Port : integer; HostName : string; LibraryLocation : string; ModuleName : string; end; Could someone help me with this Thanks Patrick -
Hi, could someone tell me what's wrong here, I'm returning an IInterface as needed so ... [dcc32 Error] clsInit.pas(313): E2250 There is no overloaded version of 'SetThreadDataFactory' that can be called with these arguments ( in OtlThreadPool ; TOTPThreadDataFactoryFunction = function: IInterface; ) function TFConfig.CreateThreadPool(aHandle : THandle ; aConfig : rConnectionConfig ; aValue: string) : iOmniThreadPool; begin result := otlThreadPool.CreateThreadPool(aValue); result.MaxExecuting := result.NumCores; result.SetThreadDataFactory ( function : IInterface begin result:=CreateConnectionPoolData(aHandle,aConfig); end ); end; I have defined CreateConnectionPoolData as follow function CreateConnectionPoolData(const aHandle : THandle ; const aConfig : rConnectionConfig) : IInterface; var aPool : IConnectionPoolData; begin aPool := TConnectionPoolData.Create; aPool.WithHandle(aHandle).WithConnectionConfig(aConfig); result:=aPool; end; IConnectionPoolData = interface function WithHandle(const aValue : HWND) : IConnectionPoolData ; function WithConnectionConfig(aValue : rConnectionConfig) : IConnectionPoolData ; end; Thanks Patrick