Fungsi TerminateThread (processthreadsapi.h)

Mengakhiri utas.

Sintaks

BOOL TerminateThread(
  [in, out] HANDLE hThread,
  [in]      DWORD  dwExitCode
);

Parameter

[in, out] hThread

Handel ke utas yang akan dihentikan.

Handel harus memiliki hak akses THREAD_TERMINATE . Untuk informasi selengkapnya, lihat Keamanan Utas dan Hak Akses.

[in] dwExitCode

Kode keluar untuk utas. Gunakan fungsi GetExitCodeThread untuk mengambil nilai keluar utas.

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.

Keterangan

TerminateThread digunakan untuk menyebabkan utas keluar. Ketika ini terjadi, utas target tidak memiliki kesempatan untuk menjalankan kode mode pengguna apa pun. DLL yang dilampirkan ke utas tidak diberi tahu bahwa utas dihentikan. Sistem membebaskan tumpukan awal utas.

Windows Server 2003 dan Windows XP: Tumpukan awal utas target tidak dikosongkan, menyebabkan kebocoran sumber daya.

TerminateThread adalah fungsi berbahaya yang hanya boleh digunakan dalam kasus yang paling ekstrem. Anda harus memanggil TerminateThread hanya jika Anda tahu persis apa yang dilakukan utas target, dan Anda mengontrol semua kode yang mungkin dijalankan utas target pada saat penghentian. Misalnya, TerminateThread dapat mengakibatkan masalah berikut:

  • Jika utas target memiliki bagian penting, bagian penting tidak akan dirilis.
  • Jika utas target mengalokasikan memori dari tumpukan, kunci tumpukan tidak akan dilepaskan.
  • Jika utas target menjalankan panggilan kernel32 tertentu saat dihentikan, status kernel32 untuk proses utas bisa tidak konsisten.
  • Jika utas target memanipulasi status global DLL bersama, status DLL dapat dihancurkan, yang memengaruhi pengguna DLL lainnya.
Utas tidak dapat melindungi dirinya dari TerminateThread, selain dengan mengontrol akses ke handelnya. Handel utas yang dikembalikan oleh fungsi CreateThread dan CreateProcess memiliki akses THREAD_TERMINATE , sehingga setiap penelepon yang memegang salah satu handel ini dapat mengakhiri utas Anda.

Jika utas target adalah utas terakhir dari proses ketika fungsi ini dipanggil, proses utas juga dihentikan.

Status objek utas menjadi sinyal, melepaskan utas lain yang telah menunggu utas dihentikan. Status penghentian utas berubah dari STILL_ACTIVE menjadi nilai parameter dwExitCode .

Mengakhiri utas tidak selalu menghapus objek utas dari sistem. Objek utas dihapus saat handel utas terakhir ditutup.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header processthreadsapi.h (termasuk Windows.h pada Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

Fungsi Proses dan Utas

Mengakhiri Utas

Threads