Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

32.2 Semaphore mit Hilfe interner Bibliotheken

32.2 Semaphore mit Hilfe interner Bibliotheken

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
					
#define _AFXDLL
#include <afxmt.h>

#include <stdio.h>
#include "ThreadWrapper.h"

struct SMyThreadData {
	int	iStart;
	int	iEnd;
	int	iID;
	CSemaphore*	pSemaphor;
};


// Funktion welche durch den Thread ausgeführt wird ///////////////////////////
DWORD ThreadFunc(CThreadWrapper<SMyThreadData>* pThread) {
	__try {
		pThread->GetData().pSemaphor->Lock();

		for (int iCount = pThread->GetData().iStart; iCount < pThread->GetData().iEnd && !pThread->IsTerminated(); iCount++) {
			printf("Thread: %i - %i\n", pThread->GetData().iID, iCount);
			Sleep(100);
		} // end of for
	} __finally {
		pThread->GetData().pSemaphor->Unlock(1, NULL);
	} // end of try

	return 0;
} // ThreadFunc ///////////////////////////////////////////////////////////////



// Hauptfunktion der Anwendung ////////////////////////////////////////////////
int main(int argc, char** argv) {
	CSemaphore*			pSemaphor	= new CSemaphore(2, 2, NULL, NULL);

	SMyThreadData			sData1		= {0, 5, 1, pSemaphor};
	SMyThreadData			sData2		= {1000, 1005, 2, pSemaphor};
	SMyThreadData			sData3		= {10000, 10005, 3, pSemaphor};

	CThreadWrapper<SMyThreadData>*	pThread1	= new CThreadWrapper<SMyThreadData>(&ThreadFunc, sData1);
	CThreadWrapper<SMyThreadData>*	pThread2	= new CThreadWrapper<SMyThreadData>(&ThreadFunc, sData2);
	CThreadWrapper<SMyThreadData>*	pThread3	= new CThreadWrapper<SMyThreadData>(&ThreadFunc, sData3);

	printf("START\n");

	pThread1->Resume();
	pThread2->Resume();
	pThread3->Resume();

	// Warten, bis alle Threads fertig sind
	while (!pThread1->IsFinished() || !pThread2->IsFinished()) Sleep(1);

	delete pThread1;
	delete pThread2;
	delete pThread3;

	delete pSemaphor;
	
	printf("ENDE\n");

	return 0;
} // main /////////////////////////////////////////////////////////////////////
					

Ich denke, an dieser Stelle brauche ich nicht noch einmal erklären, was sich geändert hat, da ich genauso vorgegangen bin, wie bei den Anderen auch. Das einzige worauf ich Sie hinweisen möchte ist, dass beim Erzeugen des Semaphorobjekts die Reihenfolge der Parameter anders ist.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012