Bagikan melalui


Fungsi AvRtCreateThreadOrderingGroup (avrt.h)

Membuat grup pengurutan utas.

Untuk mencegah utas server untuk grup pemesanan utas kelaparan jika utas klien prioritas yang lebih tinggi berjalan, gunakan fungsi AvRtCreateThreadOrderingGroupEx .

Sintaks

AVRTAPI BOOL AvRtCreateThreadOrderingGroup(
  [out]          PHANDLE        Context,
  [in]           PLARGE_INTEGER Period,
  [in, out]      GUID           *ThreadOrderingGuid,
  [in, optional] PLARGE_INTEGER Timeout
);

Parameter

[out] Context

Penunjuk ke handel konteks.

[in] Period

Penunjuk ke nilai, dalam kenaikan 100 nanodetik, yang menentukan periode untuk grup pengurutan utas. Setiap utas dalam grup pemesanan utas berjalan satu kali selama periode ini. Jika semua utas menyelesaikan eksekusinya sebelum periode berakhir, semua utas menunggu hingga sisa periode berlalu sebelum dieksekusi lagi.

Nilai yang mungkin untuk parameter ini bergantung pada platform, tetapi parameter ini bisa serendah 500 mikrosecond atau setingkat 0x1FFFFFFFFFFFFFFF. Jika parameter ini kurang dari 500 mikro detik, maka parameter ini diatur ke 500 mikrosekon. Jika parameter ini lebih besar dari maksimum, maka parameter diatur ke 0x1FFFFFFFFFFFFFFF.

[in, out] ThreadOrderingGuid

Penunjuk ke pengidentifikasi unik untuk grup pengurutan utas yang akan dibuat. Jika nilai ini tidak unik untuk layanan pemesanan utas, fungsi akan gagal.

Jika pengidentifikasi GUID_NULL pada input, layanan pemesanan utas menghasilkan dan mengembalikan pengidentifikasi unik.

[in, optional] Timeout

Penunjuk ke nilai waktu habis. Semua utas dalam grup harus menyelesaikan eksekusinya dalam Periode plus Batas Waktu.

Jika utas gagal menyelesaikan pemrosesannya dalam periode ditambah interval waktu habis ini, utas akan dihapus dari grup pengurutan utas. Jika induk gagal menyelesaikan pemrosesannya dalam periode ditambah interval waktu habis, grup pengurutan utas akan dihancurkan.

Nilai yang mungkin untuk parameter ini bergantung pada platform, tetapi dapat serendah 500 mikro detik atau setingkat 0x1FFFFFFFFFFFFFFF. Jika parameter ini kurang dari 500 mikro detik, maka parameter ini diatur ke 500 mikrosekon. Jika parameter ini lebih besar dari maksimum, maka parameter diatur ke 0x1FFFFFFFFFFFFFFF.

Jika parameter ini NULL atau 0, defaultnya adalah lima kali nilai Periode.

Jika parameter ini THREAD_ORDER_GROUP_INFINITE_TIMEOUT, grup dibuat dengan interval waktu habis yang tak terbatas. Ini dapat berguna untuk tujuan penelusuran kesalahan.

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Jika grup pengurutan utas dengan pengidentifikasi yang ditentukan sudah ada, fungsi gagal dan mengatur kesalahan terakhir ke ERROR_ALREADY_EXISTS.

Keterangan

Utas panggilan dianggap sebagai utas induk. Setiap grup pemesanan utas memiliki satu utas induk. Setiap utas induk dapat memiliki nol atau lebih utas pendahulu dan nol atau lebih utas penerus. Utas klien dapat bergabung dengan grup pengurutan utas dan menentukan apakah itu pendahulu atau penerus menggunakan fungsi AvRtJoinThreadOrderingGroup .

Utas induk mencakup kode yang akan dijalankan selama setiap periode dalam perulangan yang dikontrol oleh fungsi AvRtWaitOnThreadOrderingGroup .

Untuk menghapus grup pemesanan utas, panggil fungsi AvRtDeleteThreadOrderingGroup .

Utas dapat membuat lebih dari satu grup pengurutan utas dan bergabung dengan lebih dari satu grup pengurutan utas. Namun, utas tidak dapat bergabung dengan grup pemesanan utas yang sama lebih dari satu kali.

Contoh

Cuplikan berikut membuat grup pengurutan utas.

#include <windows.h>
#include <avrt.h>
#include <stdio.h>

#pragma comment(lib, "Avrt.lib")

#define _100NS_IN_1MS 10000

int main( void )
{
    HANDLE hContext = NULL;
    LARGE_INTEGER period, timeout;
    GUID guid = { 0 };
    BOOL bRes;

    period.QuadPart = Int32x32To64(_100NS_IN_1MS, 1000);   // 1 second
    timeout.QuadPart = Int32x32To64(_100NS_IN_1MS, 10000); // 10 seconds

    bRes = AvRtCreateThreadOrderingGroup( 
            &hContext,
            &period,
            &guid,
            &timeout );

    if( bRes != TRUE )
    {
        printf("Error creating group (%d)\n", GetLastError());
            return 1;
    }

    return 0;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Target Platform Windows
Header avrt.h
Pustaka Avrt.lib
DLL Avrt.dll

Lihat juga

Layanan Pemesanan Utas