CAMThread-Klasse
Die CAMThread -Klasse ist eine abstrakte Klasse zum Verwalten von Arbeitsthreads.
| Geschützte Membervariablen | BESCHREIBUNG |
|---|---|
| m _ hThread | Handle für den Thread. |
| Öffentliche Membervariablen | BESCHREIBUNG |
| m _ AccessLock | Kritischer Abschnitt, der den Zugriff auf den Thread durch andere Threads sperrt. |
| m _ WorkerLock | Kritischer Abschnitt, der datensperrt, die von Threads gemeinsam genutzt werden. |
| Öffentliche Methoden | BESCHREIBUNG |
| CAMThread | Konstruktormethode. |
| ~ WEBCAMThread | Destruktormethode. Virtuellen. |
| InitialThreadProc | Ruft die ThreadProc-Methode auf, wenn der Thread erstellt wird. |
| Erstellen | Erstellt den Thread. |
| CallWorker | Signalisiert dem Thread eine Anforderung. |
| Schließen | Wartet, bis der Thread beendet wird, und gibt dann seine Ressourcen frei. |
| ThreadExists | Fragt ab, ob der Thread vorhanden ist. |
| GetRequest | Wartet auf die nächste Anforderung. |
| CheckRequest | Überprüft, ob eine Anforderung ohne Blockierung vor liegt. |
| Antwort | Antwortet auf eine Anforderung. |
| GetRequestHandle | Ruft ein Handle für das Ereignis ab, das von der CallWorker-Methode signalisiert wird. |
| GetRequestParam | Ruft die letzte Anforderung ab. |
| CoInitializeHelper | Ruft CoInitializeEx am Anfang des Threads auf. |
| Rein virtuelle Methoden | BESCHREIBUNG |
| ThreadProc | Threadprozedur. |
Bemerkungen
Diese Klasse stellt Methoden zum Erstellen eines Arbeitsthreads, zum Übergeben von Anforderungen an den Thread und zum Warten auf das Beenden des Threads zur Verfügung. Gehen Sie wie folgt vor, um diese Klasse zu verwenden:
- Leiten Sie eine Klasse von
CAMThreadab, und überschreiben Sie die rein virtuelle MethodeCAMThread::ThreadProc. Diese Methode ist die Threadprozedur, die am Anfang des Threads aufgerufen wird. - Erstellen Sie in Ihrer Anwendung eine Instanz ihrer abgeleiteten Klasse. Beim Erstellen des -Objekts wird der Thread nicht erstellt. Um den Thread zu erstellen, rufen Sie die METHODECAMThread::Create auf.
- Um Anforderungen an den Thread zu senden, rufen Sie die METHODE WEBCAMThread::CallWorker auf. Diese Methode akzeptiert einen DWORD-Parameter, dessen Bedeutung von Ihrer Klasse definiert wird. Die -Methode blockiert, bis der Thread antwortet (siehe unten).
- Reagieren Sie in Ihrer Threadprozedur auf Anforderungen, indem Sie entwederCAMThread::GetRequest oder DANNThread::CheckRequest aufrufen. Die GetRequest-Methode wird blockiert, bis ein anderer Thread CallWorker aufruft. Die CheckRequest-Methode ist nicht blockierend, wodurch der Thread bei asynchroner Arbeit auf neue Anforderungen prüfen kann.
- Wenn der Thread eine Anforderung empfängt, rufen Sie DANNThread::Reply auf, um die Blockierung des aufrufenden Threads zu entsperren. Die Reply-Methode akzeptiert einen DWORD-Parameter, der als Rückgabewert für CallWorker an den aufrufenden Thread übergeben wird.
Wenn Sie mit dem Thread fertig sind, rufen Sie die METHODECAMThread::Close auf. Diese Methode wartet darauf, dass der Thread beendet wird, und schließt dann das Threadhand handle. Ihre ThreadProc-Nachricht muss entweder allein oder als Reaktion auf eine CallWorker-Anforderung beendet werden. Die Destruktormethode ruft auch Close auf.
Im folgenden Beispiel werden diese Schritte veranschaulicht:
class MyThread : public CAMThread
{
protected:
DWORD ThreadProc(void);
};
DWORD MyThread::ThreadProc()
{
BOOL bShutDown = FALSE;
while (!bShutDown)
{
DWORD req = GetRequest();
printf("Request: %d\n", req);
bShutDown = (req == 0);
Reply(bShutDown ? S_FALSE : S_OK);
}
printf("Quitting Thread\n");
return 1;
}
void main()
{
MyThread thread;
DWORD reply;
thread.Create();
reply = thread.CallWorker(3);
reply = thread.CallWorker(0); // Thread exits.
}
In ihrer abgeleiteten Klasse können Sie auch Memberfunktionen definieren, die die Parameter für CallWorker überprüfen. Im folgenden Beispiel wird eine typische Methode dafür veranschaulicht:
enum Command {CMD_INIT, CMD_RUN, CMD_STOP, CMD_EXIT};
HRESULT Init(void) { return CallWorker(CMD_INIT); }
HRESULT Run(void) { return CallWorker(CMD_RUN); }
HRESULT Stop(void) { return CallWorker(CMD_STOP); }
HRESULT Exit(void) { return CallWorker(CMD_EXIT); }
Die CAMThread -Klasse bietet zwei kritische Abschnitte als öffentliche Membervariablen. Verwenden CAMThread::m_AccessLock Sie , um den Zugriff auf den Thread durch andere Threads zu sperren. (Beispielsweise halten die Create- und CallWorker-Methoden diese Sperre, um Vorgänge für den Thread zu serialisieren.) Verwenden Sie WEBCAMThread::m _ WorkerLock, um Daten zu sperren, die von Threads gemeinsam genutzt werden.
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Header |
|
| Bibliothek |
|