当前位置: 首页>>代码示例>>C#>>正文


C# Snapshot.Reset方法代码示例

本文整理汇总了C#中Snapshot.Reset方法的典型用法代码示例。如果您正苦于以下问题:C# Snapshot.Reset方法的具体用法?C# Snapshot.Reset怎么用?C# Snapshot.Reset使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Snapshot的用法示例。


在下文中一共展示了Snapshot.Reset方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: UpdateSnapshot

		internal void UpdateSnapshot(Snapshot snapshot, bool forceFullRebuild)
		{
            if (SuspendRebuilding)
            {
                return;
            }

			lock (AddLock)
			{
				// Start by rebasing if necessary
				bool forceUpdate = false;
				if (RebaseBlocks)
				{
					snapshot.Rebase(AddressRange.Min, AddressWidth);
					RebaseBlocks = false;
					forceUpdate = true;
				}

				UInt64 maxTime = ArtificialMaxTime;
				if (maxTime == 0)
				{
					maxTime = TimeRange.Max;
				}

				IEnumerable<KeyValuePair<TimeStamp, IPacket>> packets = null;
				bool isBackward = false;
				if (forceFullRebuild)
				{
					snapshot.Reset();
					packets = Get();
				}
				else
				{
					// Determine what entries we need to get based off scrubber position
					UInt64 timeRange = maxTime - TimeRange.Min;

					// Readjust the position if needed
					if (ArtificialMaxTime == 0 && timeRange > 0)
					{
						double rangeScale = (double)LastRange / (double)timeRange;

						if (rangeScale > 0 && Scrubber._Position < 1.0)
						{
							// Hacky
							Scrubber._Position *= rangeScale;
							Scrubber._Position = Scrubber._Position.Clamp(0.0, 1.0);
							Scrubber.FlagRedraw();
						}
					}

					LastRange = timeRange;

					double position = Scrubber.Position;
					UInt64 currentTime = TimeRange.Min + (UInt64)((double)timeRange * position);

					bool nothingToProcess = false;
					if (currentTime > LastTimestamp.Time)
					{
						packets = GetForward(new TimeStamp(currentTime));
					}
					else if (currentTime < LastTimestamp.Time)
					{
						packets = GetBackward(new TimeStamp(currentTime));
						isBackward = true;
					}
					else
					{
						nothingToProcess = true;
					}

					LastTimestamp = new TimeStamp(currentTime);

					if (nothingToProcess && !forceUpdate)
					{
						return;
					}
				}

				if (AddressRange.Max < AddressRange.Min)
				{
					return;
				}

				// Create final list, removing allocations as frees are encountered
				if (packets != null)
				{
					int index = 0;
					foreach (var pair in packets)
					{
						// On a full rebuild, if there's a position specified in
						// the snapshot, only go up to that position
						if (forceFullRebuild && snapshot.Position > 0)
						{
							if (index > snapshot.Position)
							{
								break;
							}
						}

						// TODO: Can allocation and free processing be combined?
//.........这里部分代码省略.........
开发者ID:dakahler,项目名称:alloclave,代码行数:101,代码来源:History.cs


注:本文中的Snapshot.Reset方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。