Unity 6.3
0 онлайн 94 гостей 3 в системе
Вход

RadeonRaysContext.IsCompleted

Declaration

public bool IsCompleted(LightTransport.EventID id);

Параметры

Параметр Описание
Идентификатор ID события для запроса.

Возвращаемое значение

логическое True, если асинхронная операция завершена.

Описание

Возвращает true, если асинхронная операция завершена.

Этот метод возвращается немедленно и не ожидает завершения операции. Используйте Flush, чтобы заставить реализацию устройства начать обработку команд. Используйте IDeviceContext.Wait для busy-wait для определенного события.

using System.Threading;
using Unity.Collections;
using UnityEngine;
using UnityEngine.LightTransport;

IDeviceContext ctx = new RadeonRaysContext(); ctx.Initialize(); uint length = 8; var input = new NativeArray<byte>((int)length, Allocator.Persistent); for (int i = 0; i < length; ++i) { input[i] = (byte)i; } var output = new NativeArray<byte>((int)length, Allocator.Persistent); BufferID id = ctx.CreateBuffer(length, 1); var writeEvent = ctx.CreateEvent(); ctx.WriteBuffer(id.Slice<byte>(), input, writeEvent); var readEvent = ctx.CreateEvent(); ctx.ReadBuffer(id.Slice<byte>(), output, readEvent); bool flushOk = ctx.Flush(); Assert.IsTrue(flushOk); input.Dispose(); var watchDogTimeout = Time.realtimeSinceStartup + 5.0f; while (!ctx.IsCompleted(readEvent)) { Thread.Sleep(10); if (Time.realtimeSinceStartup > watchDogTimeout) Assert.IsTrue(false, "watchdog timeout"); }

// The event has completed. ctx.DestroyEvent(readEvent); ctx.DestroyEvent(writeEvent);

ctx.DestroyBuffer(id); for (int i = 0; i < length; ++i) Assert.AreEqual((byte)i, output[i]); output.Dispose(); ctx.Dispose();

Как проверить, завершена ли асинхронная операция.