System.SyncObjs.TSpinWait
Delphi
TSpinWait = record
private const
YieldThreshold = 10;
Sleep1Threshold = 20;
Sleep0Threshold = 5;
private
FCount: Integer;
function GetNextSpinCycleWillYield: Boolean;
public
procedure Reset;
procedure SpinCycle;
class procedure SpinUntil(const ACondition: TFunc<Boolean>); overload; static;
class function SpinUntil(const ACondition: TFunc<Boolean>; Timeout: Cardinal): Boolean; overload; static;
class function SpinUntil(const ACondition: TFunc<Boolean>; const Timeout: TTimeSpan): Boolean; overload; static;
property Count: Integer read FCount;
property NextSpinCycleWillYield: Boolean read GetNextSpinCycleWillYield;
end;
C++
struct DECLSPEC_DRECORD TSpinWait
{
private:
static const System::Int8 YieldThreshold = System::Int8(0xa);
static const System::Int8 Sleep1Threshold = System::Int8(0x14);
static const System::Int8 Sleep0Threshold = System::Int8(0x5);
int FCount;
bool __fastcall GetNextSpinCycleWillYield(void);
public:
void __fastcall Reset(void);
void __fastcall SpinCycle(void);
static void __fastcall SpinUntil(const System::DelphiInterface<System::Sysutils::TFunc__1<bool> > ACondition)/* overload */;
static bool __fastcall SpinUntil(const System::DelphiInterface<System::Sysutils::TFunc__1<bool> > ACondition, unsigned Timeout)/* overload */;
#ifndef _WIN64
static bool __fastcall SpinUntil(const System::DelphiInterface<System::Sysutils::TFunc__1<bool> > ACondition, const System::Timespan::TTimeSpan &Timeout)/* overload */;
#else /* _WIN64 */
static bool __fastcall SpinUntil(const System::DelphiInterface<System::Sysutils::TFunc__1<bool> > ACondition, const System::Timespan::TTimeSpan Timeout)/* overload */;
#endif /* _WIN64 */
__property int Count = {read=FCount};
__property bool NextSpinCycleWillYield = {read=GetNextSpinCycleWillYield};
};
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
record struct |
public | System.SyncObjs.pas System.SyncObjs.hpp |
System.SyncObjs | System.SyncObjs |
Description
Une instance de TSpinWait permet au thread en cours d'attendre pendant un certain nombre de cycles d'incrémentation.
L'enregistrement TSpinWait peut être utilisé pour provoquer l'état d'attente d'un thread pendant un certain nombre de cycles d'incrémentation. A l'opposé de la méthode TThread.Sleep, pour le thread en cours, TSpinWait ne renoncera pas au reste de sa tranche de temps processeur en cours.