Rumah > pembangunan bahagian belakang > C++ > Bagaimana cara memanggil fungsi API Perpaduan dengan selamat dari benang bukan main?

Bagaimana cara memanggil fungsi API Perpaduan dengan selamat dari benang bukan main?

Mary-Kate Olsen
Lepaskan: 2025-01-31 12:01:09
asal
158 orang telah melayarinya

How to Safely Call Unity API Functions from Non-Main Threads?

Gunakan API Perpaduan dari benang lain atau fungsi panggilan di benang utama

Soalan

Dalam benang yang berasingan, menggunakan API soket Perpaduan boleh menyebabkan kesilapan, terutamanya apabila mengemas kini elemen UI dari sub -thread. Oleh kerana masalah keselamatan benang, panggilan API Perpaduan yang dilakukan dari benang yang tidak dapat dicetuskan akan mencetuskan keabnormalan.

penyelesaian

Panggil perpaduan API

melaksanakan langkah -langkah berikut:

Buat statik

yang dipanggil

untuk menyimpan operasi yang perlu dilakukan di benang utama.
  1. Salin ke senarai tempatan (actionQueuesUpdateFunc) dan lakukan operasi ini. List<Action>
  2. Buat nilai boolean rugi (
  3. ) untuk menunjukkan apabila fungsi dikendalikan untuk dilaksanakan apabila fungsi dikendalikan. actionQueuesUpdateFunc actionCopiedQueueUpdateFunc
  4. Panggil fungsi thread utama
  5. noActionQueueToExecuteUpdateFunc Update fungsi untuk memanggil fungsi dari benang yang berasingan:

atau, lulus fungsi sebagai parameter:

Perbadanan operasi di thread utama

<code class="language-csharp">UnityThread.executeInUpdate(() =>
{
    // 在主线程中执行的代码
});</code>
Salin selepas log masuk
untuk coroutine:

cara menggunakan
<code class="language-csharp">Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 函数代码
}</code>
Salin selepas log masuk

Inisialisasi dalam :

<code class="language-csharp">UnityThread.executeCoroutine(myCoroutine());

IEnumerator myCoroutine()
{
    // 协程代码
}</code>
Salin selepas log masuk
Jalankan kod dalam :

  1. Awake() melakukan dalam : UnityThread
<code class="language-csharp">UnityThread.initUnityThread();</code>
Salin selepas log masuk
    Jalankan kod dalam :
  1. Update
<code class="language-csharp">UnityThread.executeInUpdate(() =>
{
    // Update 代码
});</code>
Salin selepas log masuk
Jalankan kod dalam :
  1. Update
Memulakan Coroutine:
<code class="language-csharp">Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 方法代码
}</code>
Salin selepas log masuk
  1. LateUpdate Penerangan Tambahan
Untuk meningkatkan prestasi, jika tidak diperlukan, sila komen
<code class="language-csharp">UnityThread.executeInLateUpdate(() =>
{
    // LateUpdate 代码
});</code>
Salin selepas log masuk
dan
    .
  1. FixedUpdate Penyelesaian ini menggunakan satu
  2. contoh untuk semua skrip.
<code class="language-csharp">UnityThread.executeInFixedUpdate(() =>
{
    // FixedUpdate 代码
});</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana cara memanggil fungsi API Perpaduan dengan selamat dari benang bukan main?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan