> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ScheduleFrameEventX (XBOX One 系列)

> 排程要在畫面內發出一或多次訊號的事件。

排程要在畫面內發出一或多次訊號的事件。

## 語法

```cpp theme={null}
HRESULT ScheduleFrameEventX(
        D3D12XBOX_FRAME_EVENT_TYPE Type,
        UINT IntervalOffsetInMicroseconds,
        D3D12XBOX_SCHEDULE_FRAME_OBJECT_LIST* pAncillarySignalList,
        D3D12XBOX_SCHEDULE_FRAME_EVENT_FLAGS Flags)
```

### 參數

*Type*   \_In\_\
類型：[D3D12XBOX\_FRAME\_EVENT\_TYPE](/zh-TW/reference/graphics/d3d12_x/enums/d3d12xbox_frame_event_type)

要排程的事件類型。

*IntervalOffsetInMicroseconds*   \_In\_\
類型：UINT

要排程指定事件的時間位移；位移以從畫面間隔開始算起的微秒數指定。只有支援排程位移的事件 (例如起點事件) 才支援排程位移。

*pAncillarySignalList*   \_In\_opt\_\
類型：[D3D12XBOX\_SCHEDULE\_FRAME\_OBJECT\_LIST](/zh-TW/reference/graphics/d3d12_x/structs/d3d12xbox_schedule_frame_object_list)\*

選擇性清單，最多包含七 (7) 個輔助事件，每當排程的畫面事件發生時就會對其發出訊號。

*Flags*   \_In\_\
類型：[D3D12XBOX\_SCHEDULE\_FRAME\_EVENT\_FLAGS](/zh-TW/reference/graphics/d3d12_x/enums/d3d12xbox_schedule_frame_event_flags)

用來對排程事件提供額外控制的旗標。[D3D12XBOX\_SCHEDULE\_FRAME\_EVENT\_FLAG\_DISABLE\_SIGNAL](/zh-TW/reference/graphics/d3d12_x/enums/d3d12xbox_schedule_frame_event_flags) 可用來停用先前針對起點以外類型排程的訊號；起點一旦建立就無法停用。

## 傳回值

類型：HRESULT

HRESULT 成功或錯誤碼。

如果是無效的事件類型、間隔位移、訊號清單和旗標值，則傳回 E\_INVALIDARG。

如果在嘗試排程事件之前尚未建立畫面間隔，則傳回 E\_INVALIDARG。

## 備註

[WaitFrameEventX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_waitframeeventx) 方法可用來封鎖或輪詢排程的畫面事件。每當透過呼叫 [SetFrameIntervalX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_setframeintervalx) 變更畫面間隔或週期時，都必須以新的 *ScheduleFrameEventX* 呼叫重新排程事件。

排程畫面起點事件是為了對畫面的開始時間提供精細控制，進而將管線延遲降至最低。系統會嘗試將遊戲台輸入的韌體取樣與已建立的畫面起點時間同步，使輸入資料恰好在畫面開始時取得。在起點事件發出訊號後立即查詢輸入，應用程式就能取得最新的刺激資訊，作為畫面轉譯的依據。如果選取的畫面起點位移盡可能接近目標顯示 VBlank 的時間，使用者輸入與顯示之間的延遲就會降至最低。

產生畫面所需的 CPU 時間和 GPU 時間 (以及管線重疊的程度) 在應用程式的存留期間會有所變化。為了因應畫面統計資料的意見反應，會經常更新畫面起點位移的排程，以維持最低延遲。

持續使用 [GetFrameStatisticsX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_getframestatisticsx) 方法監視從起點訊號到最後一次寫入畫面交換資源及其呈現時間的畫面持續時間。之後，以更新的位移排程起點事件，讓交換資源盡可能接近其目標顯示 VBlank 完成並呈現，同時保留一些邊界以防範畫面持續時間突增。一般目標是將起點位移時間排程為等於畫面間隔的 [PeriodInIntervals](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_setframeintervalx) x [LengthInMicroseconds](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_setframeintervalx) - *measured\_frame\_duration* - *margin\_for\_variance*。

起點事件在內部利用 vline 中斷來完成以間隔位移為基礎的排程，因此精細度取決於目前的顯示解析度。

除了畫面起點之外，還可以排程其他事件來追蹤 VBlank 和翻轉的發生。不過，與起點不同的是，這些事件僅作為通知排程，無法直接控制時間。另外，與起點不同的是，VBlank 和翻轉事件在每個畫面間隔中可能會發出多次訊號。

第一次排程畫面事件的呼叫會立即套用。後續對排程事件的更新 (包括停用) 會與呈現一起以管線方式處理，使在某個間隔內所做的變更會在下一個呈現的畫面翻轉至顯示器時套用。

## 需求

**標頭：** d3d12\_x.h

**程式庫：** d3d12\_x.lib

**支援的平台：** XBOX One 系列

## 另請參閱

[ID3D12Device](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/id3d12device)


## Related topics

- [XAsyncSchedule](/zh-CN/reference/system/xasyncprovider/functions/xasyncschedule.md)
- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [ACP_MESSAGE_AUDIO_FRAME_START](/zh-CN/reference/audio/acphal/structs/acp_message_audio_frame_start.md)
- [SetShapeDmaNumFrames](/zh-CN/reference/audio/shapedmacontext/functions/setshapedmanumframes.md)
- [GetShapeDmaNumFrames](/zh-CN/reference/audio/shapedmacontext/functions/getshapedmanumframes.md)
