Bagikan melalui


Kelas CComMultiThreadModel

CComMultiThreadModel menyediakan metode thread-safe untuk meningkatkan dan mengurangi nilai variabel.

Sintaks

class CComMultiThreadModel

Anggota

Typedef Publik

Nama Deskripsi
CComMultiThreadModel::AutoCriticalSection Mereferensikan kelas CComAutoCriticalSection.
CComMultiThreadModel::CriticalSection Mereferensikan kelas CComCriticalSection.
CComMultiThreadModel::ThreadModelNoCS Mereferensikan kelas CComMultiThreadModelNoCS.

Metode Publik

Nama Deskripsi
CComMultiThreadModel::D ecrement (Statis) Mengurangi nilai variabel yang ditentukan dengan cara yang aman utas.
CComMultiThreadModel::Increment (Statis) Menaikkan nilai variabel yang ditentukan dengan cara yang aman utas.

Keterangan

Biasanya, Anda menggunakan CComMultiThreadModel melalui salah satu dari dua nama typedef, baik CComObjectThreadModel atau CComGlobalsThreadModel. Kelas yang dirujuk oleh masing-masing typedef tergantung pada model utas yang digunakan, seperti yang ditunjukkan dalam tabel berikut:

typedef Utas tunggal Utas apartemen Utas gratis
CComObjectThreadModel S S M
CComGlobalsThreadModel S M M

S= CComSingleThreadModel; M= CComMultiThreadModel

CComMultiThreadModel itu sendiri mendefinisikan tiga typedef nama. AutoCriticalSection dan CriticalSection kelas referensi yang menyediakan metode untuk mendapatkan dan merilis kepemilikan bagian penting. ThreadModelNoCS kelas referensi [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).

Persyaratan

Header: atlbase.h

CComMultiThreadModel::AutoCriticalSection

Saat menggunakan CComMultiThreadModel, nama typedef mereferensikan AutoCriticalSection kelas CComAutoCriticalSection, yang menyediakan metode untuk mendapatkan dan merilis kepemilikan objek bagian penting.

typedef CComAutoCriticalSection AutoCriticalSection;

Keterangan

CComSingleThreadModel dan CComMultiThreadModelNoCS juga berisi definisi untuk AutoCriticalSection. Tabel berikut menunjukkan hubungan antara kelas model utas dan kelas bagian penting yang dirujuk oleh AutoCriticalSection:

Kelas yang ditentukan dalam Kelas yang dirujuk
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

Selain AutoCriticalSection, Anda dapat menggunakan typedef nama CriticalSection. Anda tidak boleh menentukan AutoCriticalSection dalam objek global atau anggota kelas statis jika Anda ingin menghilangkan kode startup CRT.

Contoh

Kode berikut dimodelkan setelah CComObjectRootEx, dan menunjukkan AutoCriticalSection digunakan di lingkungan utas.

template<class ThreadModel>
class CMyAutoCritClass
{
public:
   typedef ThreadModel _ThreadModel;
   typedef typename _ThreadModel::AutoCriticalSection _CritSec;

   CMyAutoCritClass() : m_dwRef(0) {}

   ULONG InternalAddRef()
   {
      return _ThreadModel::Increment(&m_dwRef);
   }
   ULONG InternalRelease()
   {
      return _ThreadModel::Decrement(&m_dwRef);
   }
   void Lock() { m_critsec.Lock( ); }
   void Unlock() { m_critsec.Unlock(); }

private:
   _CritSec m_critsec;
   LONG m_dwRef;

Tabel berikut menunjukkan hasil InternalAddRef metode dan Lock , tergantung pada ThreadModel parameter templat dan model utas yang digunakan oleh aplikasi:

ThreadModel = CComObjectThreadModel

Metode Threading Tunggal atau Apartemen Utas Gratis
InternalAddRef Kenaikan tidak aman utas. Kenaikan adalah thread-safe.
Lock Tidak melakukan apa-apa; tidak ada bagian penting untuk dikunci. Bagian penting dikunci.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

Metode Threading Tunggal atau Apartemen Utas Gratis
InternalAddRef Kenaikan tidak aman utas. Kenaikan adalah thread-safe.
Lock Tidak melakukan apa-apa; tidak ada bagian penting untuk dikunci. Tidak melakukan apa-apa; tidak ada bagian penting untuk dikunci.

CComMultiThreadModel::CriticalSection

Saat menggunakan CComMultiThreadModel, nama typedef mereferensikan CriticalSection kelas CComCriticalSection, yang menyediakan metode untuk mendapatkan dan merilis kepemilikan objek bagian penting.

typedef CComCriticalSection CriticalSection;

Keterangan

CComSingleThreadModel dan CComMultiThreadModelNoCS juga berisi definisi untuk CriticalSection. Tabel berikut menunjukkan hubungan antara kelas model utas dan kelas bagian penting yang dirujuk oleh CriticalSection:

Kelas yang ditentukan dalam Kelas yang dirujuk
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

Selain CriticalSection, Anda dapat menggunakan typedef nama AutoCriticalSection. Anda tidak boleh menentukan AutoCriticalSection dalam objek global atau anggota kelas statis jika Anda ingin menghilangkan kode startup CRT.

Contoh

Lihat CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModel::D ecrement

Fungsi statis ini memanggil fungsi Win32 InterlockedDecrement, yang mengurangi nilai variabel yang ditunjukkan oleh p.

static ULONG WINAPI Decrement(LPLONG p) throw ();

Parameter

p
[di] Penunjuk ke variabel yang akan diderementasi.

Tampilkan Nilai

Jika hasil dari penurunan adalah 0, maka Decrement mengembalikan 0. Jika hasil penurunan bukan nol, nilai pengembalian juga bukan nol tetapi mungkin tidak sama dengan hasil penurunan.

Keterangan

InterlockedDecrement mencegah lebih dari satu utas secara bersamaan menggunakan variabel ini.

CComMultiThreadModel::Increment

Fungsi statis ini memanggil fungsi Win32 InterlockedIncrement, yang menaikkan nilai variabel yang ditunjukkan oleh p.

static ULONG WINAPI Increment(LPLONG p) throw ();

Parameter

p
[di] Penunjuk ke variabel yang akan dinaikkan.

Tampilkan Nilai

Jika hasil kenaikan adalah 0, maka Increment mengembalikan 0. Jika hasil kenaikan bukan nol, nilai yang dikembalikan juga bukan nol tetapi mungkin tidak sama dengan hasil kenaikan.

Keterangan

InterlockedIncrement mencegah lebih dari satu utas secara bersamaan menggunakan variabel ini.

CComMultiThreadModel::ThreadModelNoCS

Saat menggunakan CComMultiThreadModel, nama typedef mereferensikan ThreadModelNoCS kelas CComMultiThreadModelNoCS.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Keterangan

CComMultiThreadModelNoCS menyediakan metode thread-safe untuk meningkatkan dan menurunkan variabel; namun, itu tidak menyediakan bagian penting.

CComSingleThreadModel dan CComMultiThreadModelNoCS juga berisi definisi untuk ThreadModelNoCS. Tabel berikut menunjukkan hubungan antara kelas model utas dan kelas yang dirujuk oleh ThreadModelNoCS:

Kelas yang ditentukan dalam Kelas yang dirujuk
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel
CComMultiThreadModelNoCS CComMultiThreadModelNoCS

Contoh

Lihat CComMultiThreadModel::AutoCriticalSection.

Lihat juga

Kelas CComSingleThreadModel
Kelas CComAutoCriticalSection
CComCriticalSection Class
Gambaran Umum Kelas