Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

31

01.12.2012, 10:04

Grafische Objekte werden in eines Seperaten Funktion initialisiert, dazu zählen auch schriften
Einsatz von Globalen objekten in der Objektorientierten Programmierung ist immer vermeidbar und zeugt von schlechtem still
Allein daran in wievielen Büchern die veraltete Falsche Ungarian Notation angewendet wird, zeigt das man auch Büchern nicht blind vertrauen sollte.
Ich habe schon Bücher über C# gelesen wo vor jeder Klasse ein großes C vorangestellt wird, eine Programmiersprache in der letztendlich alles ein Objekt ist, und das C somit keinerlei Information enthält sondern nur lästig und meiner Meinung nach störend für den lesefluss ist

Bisher seh ich eigentlich nach wie vor kein Grund eine Init Methode zu verwenden, aber hier mal mein aktueller Kontext warum ich mir diese frage gestellt hab:
Ich habe angefangen mich mit XNA zu beschäftigen, dort wird jedes zeichenbare Objekt von der Drawable GameComponent Klasse abgeleitet, und kann somit neben anderen Methoden die LoadContent Methode für Garafische initialisierungen, und eben die Init Methode die kein Rückgabewert besitzt und protected ist, überschreiben. Dabei wird die Init Methode erst aufgerufen wenn das Objekt zur Component Collection der Game Klasse hinzugefügt wird (verwaltet alle Spielressourcen, ist für den Gameloop verantwortlich)
Also ist die Gefahr das eine Initmethode nicht aufgerufen wird eher weniger gegeben
Ein Programm macht was du schreibst, nicht was du willst!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

32

01.12.2012, 15:44

die Init Methode die kein Rückgabewert besitzt und protected ist

Private/protected Init-Methoden sind sehr üblich und haben auch nicht (oder nur beschränkt) die genannten Probleme. Öffentliche hingegen sind meistens keine gute Idee.

@NachoMan:
Auch von mir ein Danke für die Blumen. Aber ich sehe das gleich wie dot. Man muss mir nicht glauben (und tut das auch nicht einfach so), sondern lest meine Begründungen und mach euch selbst Gedanken über die Folgerungen und Konsequenzen. Abwägen was man schlussendlich benutzen will muss man sich immer selbst machen. Probiert auch wirklich Fehler in der Argumentation, Gegenbeispiele etc. zu finden. Erst dann fängt man auch zu verstehen warum man etwas so machen sollte. Kleines Beispiel: Zeiger vs. Referenzen. Es bringt nichts hier den Leuten Grundregeln einzuhämmern. Man muss die Unterschiede zwischen den beiden Verstehen und dann von Fall zu Fall entscheiden was man jetzt benutzen sollte. Das schöne daran ist, dass sich dann, wenn mans verstanden hat, die gleiche Vorgehensweisen wie bei allen anderen herauskristallisieren werden. Es gibt sehr viele Beispiele von solchen Sachen und darum ist das wichtigste, dass man etwas nicht einfach so macht, weil mans so "gelernt" hat, sondern weil man selbst überprüft hat, dass es das beste Mittel ist. Man sollte seine Entscheidungen also immer Begründen können. Und "weil ich das so gelernt habe" oder "weil der und der das so machen" zählt nicht. ;)

//EDIT
Dass das auch wir ständig tun müssen sieht man bei C++ mit dem neuen Standard. Plötzlich gibt es neue, bessere Möglichkeiten gewisse Dinge zu erledigen und da müssen alle (auch ich sag jetzt mal erfahrenere Entwickler) sich genau die gleichen Dinge wieder erneut überlegen. Z.b: Wie gibt man am besten einen Container von Objekten zurück? Soll das jetzt eine Referenz, ein Zeiger oder eine Rvalue-Referenz werden? usw.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

33

01.12.2012, 16:37

Ich werde denke ich meinen C++ Artikel hier in das Wiki hochladen. Da steht sowas unter anderem auf drin. Dann kann die betroffene Person einfach nachlesen und Beispiele anschauen. Ist zwar nicht direkt für die Spieleprogrammierung, aber jeder, der C++ macht, sollte sich das zu Herzen nehmen.

@dot, @drakon, @BlueCobolt: Wäre klasse, wenn ihr da mal draufschauen könntet. Ich bin der Meinung, dass das alles halbwegs vernünftig und aktuell ist.

EDIT: Ist doch etwas mehr Arbeit, weil ich den Artikel mit Personenbezug formuliert habe. Aber das erste Kapitel ist schon da:

Effektiv C++ für Spieleprogrammierer

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TrommlBomml« (01.12.2012, 16:52)


stef

Treue Seele

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

34

01.12.2012, 17:49

Meiner Meinung nach sollte ein Softwareentwickler nur eine Sache prinzipiell ablehnen: Paradigmen !
Pauschal die Behauptung aufzustellen das globale Variablen, goto usw. von Teufel sind halte ich für falsch.
Es gibt immer bestimmte Situationen in denen sowas verpöntes hilfreich sein kann.
Man denke zum Beispiel an ein MUTEX oder einen Datenbankconnect. Alles potentielle Kandidaten für globale Objekte.
Man denke an mehrfach verschachtelte Schleifen aus denen ich in bestimmten Situationen aussteigen will.
Baue ich mir in jede Schleife eine Variable für den Abbruch ein oder springe ich mit goto direkt raus.
Exceptions in Konstruktoren sind auch ein heißes Eisen. Wenn ich ein Objekt auf dem HEAP anlege und im Konstruktor
noch andere Daten mit new initialisiere und dann eine Exception werfe, wie verhält sich dann das System ?
Ist Speicher allokiert ? Ist er nicht allokiert ? Wird der Destruktor aufgerufen ? Ist der Zeiger auf das Objekt = NULL ? usw.
Viele Embeded Systeme unterstützen C++ ohne Exceptionhandling, was dann ?

Was ich damit sagen will ist: Software ist so vielseitig und komplex das man immer von Situation zu Situation entscheiden sollte.
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »stef« (01.12.2012, 18:13)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

35

01.12.2012, 18:55

Man denke zum Beispiel an ein MUTEX oder einen Datenbankconnect. Alles potentielle Kandidaten für globale Objekte.
Nein. Ganz und gar nicht. Das sind perfekte Beispiele dafür, dass es KEINE globalen Objekte sein sollten. Wie oft stellt man fest, dass man eben doch nicht nur eine DB-Verbindung braucht, sondern mehrere. Sorry, aber da hast Du ganz ganz schlechte Beispiele angeführt.

Man denke an mehrfach verschachtelte Schleifen aus denen ich in bestimmten Situationen aussteigen will. Baue ich mir in jede Schleife eine Variable für den Abbruch ein oder springe ich mit goto direkt raus.
NEIN! Dafür gibt es BREAK und CONTINUE. Ein Goto ist da die absolut falsche Lösung. Auch eine Variable ist da meist unnötig.

Exceptions in Konstruktoren sind auch ein heißes Eisen. Wenn ich ein Objekt auf dem HEAP anlege und im Konstruktor
noch andere Daten mit new initialisiere und dann eine Exception werfe, wie verhält sich dann das System ?
Ist Speicher allokiert ? Ist er nicht allokiert ? Wird der Destruktor aufgerufen ? Ist der Zeiger auf das Objekt = NULL ? usw.
Das ist wohl definiert. Du solltest Dir dazu wohl die Definition des Standards oder ein gutes Buch zurate ziehen.

Viele Embeded Systeme unterstützen C++ ohne Exceptionhandling, was dann ?
C++ ohne Exceptionhandling? Beispiel bitte. Das ist dann irgendwas, sowas wie C++ ohne Klassen: Alles, aber kein C++. Von daher muss dort eine ganz andere Lösung gewählt werden, als für C++ üblich ist. Ist ja wohl auch logisch. Davon reden wir hier aber nicht, wir reden hier von C++ mit Exceptions. Nur weil irgendwo irgendwer eins der wichtigsten Konzepte der Sprache nicht verfügbar hat, ist das kein Grund eine gute Praxis auszuschlagen auf all den Systemen, wo es funktioniert.

Du magst durchaus Recht haben, dass fast jedes Konzept irgendwo eine sinnvolle Verwendung finden kann. Deine Beispiele sind allerdings Paradebeispiele dafür, wo man sie NICHT verwenden sollte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

36

01.12.2012, 19:21

Meiner Meinung nach sollte ein Softwareentwickler nur eine Sache prinzipiell ablehnen: Paradigmen !

Du meintest Dogmen!?

Pauschal die Behauptung aufzustellen das globale Variablen, goto usw. von Teufel sind halte ich für falsch.
Es gibt immer bestimmte Situationen in denen sowas verpöntes hilfreich sein kann.

Faustregeln sind nicht in Stein gemeißelte, universelle Gesetze, sondern Leitfäden für gute Praxis. Wer ihnen blind folgt ist nicht besser als wer sie ignoriert...

Man denke zum Beispiel an ein MUTEX oder einen Datenbankconnect. Alles potentielle Kandidaten für globale Objekte.

Potentiell möglicherweise ja, in der Regel aber eher besser nicht...

Man denke an mehrfach verschachtelte Schleifen aus denen ich in bestimmten Situationen aussteigen will.
Baue ich mir in jede Schleife eine Variable für den Abbruch ein oder springe ich mit goto direkt raus.

Oder du packst die innere Schleife in eine Funktion, was wohl sowieso angebracht wäre, da das Ding offenbar relativ komplexe Logik beinhaltet... ;)

Exceptions in Konstruktoren sind auch ein heißes Eisen. Wenn ich ein Objekt auf dem HEAP anlege und im Konstruktor
noch andere Daten mit new initialisiere und dann eine Exception werfe, wie verhält sich dann das System ?
Ist Speicher allokiert ? Ist er nicht allokiert ? Wird der Destruktor aufgerufen ? Ist der Zeiger auf das Objekt = NULL ? usw.

Wenn du alles richtig machst, was in dem Fall bedeutet, dass diese im Konstruktor mit new angeleten Daten alle in entsprechenden RAII Objekten gehalten werden, dann wird alles korrekt aufgeräumt. Wenn in einem Konstruktor eine Exception fliegt, werden die Destruktoren sämtlicher, bis zu diesem Punkt vollständig konstruierter Unterobjekte aufgerufen. Da das Objekt selbst aber nicht vollständig konstruiert wurde, wird sein Destruktor nicht aufgerufen. Der durch den operator new für das Objekt anbgeforderte Speicher wird über den passenden operator delete freigegeben, bevor die Exception weiterfliegt. Da die new Expression nicht vollständig ausgewertet wurde, gibt es auch keinen Zeiger auf das Objekt, denn das Objekt existiert gar nicht, da es nie konstruiert wurde...

Viele Embeded Systeme unterstützen C++ ohne Exceptionhandling, was dann ?

Dort kann man Exceptions dann eben nicht verwenden. Aber nur weil es tatsächlich Bereiche wie manche Embedded Systeme oder Teile eines Betriebssystemkernels gibt, wo Exceptions aus bestimmten Gründen keine Option sind, heißt das noch lange nicht, dass man Exceptions im Allgemeinen nicht verwenden sollte... ;)

Was ich damit sagen will ist: Software ist so vielseitig und komplex das man immer von Situation zu Situation entscheiden sollte.

Richtig, es ist immer besser, zu wissen was man tut. Ich denk da wird dir keiner widersprechen... ;)

stef

Treue Seele

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

37

01.12.2012, 21:57

Nein. Ganz und gar nicht. Das sind perfekte Beispiele dafür, dass es KEINE globalen Objekte sein sollten. Wie oft stellt man fest, dass man eben doch nicht nur eine DB-Verbindung braucht, sondern mehrere. Sorry, aber da hast Du ganz ganz schlechte Beispiele angeführt.

Wenn ich versuche eine Exclusiv-Resource mit einem MUTEX / CriticalSection in 15 Threads zu schützen dann deklariere ich das Objekt global und mache es mit extern den jeweiligen Threadfunktionen zugänglich.
Das Objekt mühevoll 15 Threads per Zeiger zu übergeben ist völlig unsinnig, zeitaufwändig und unübersichtlich. Das selbe gilt für Datenbankverbindungen wenn diese von allen Threads benutzt werden.

NEIN! Dafür gibt es BREAK und CONTINUE. Ein Goto ist da die absolut falsche Lösung. Auch eine Variable ist da meist unnötig.

Ich hatte explizit von verschachtelten Schleifen gesprochen. Wenn du in der dritten Schleifenebene loopst und vor hast alle zu verlassen wird dir break wenig helfen.
Hier einen Konstrukt zu bauen das alle Schleifen ohne GOTO verlässt ist zeitaufwändig, mühevoll, unübersichtlich und oben drein noch fehleranfällig.

Das ist wohl definiert. Du solltest Dir dazu wohl die Definition des Standards oder ein gutes Buch zurate ziehen.

C++ ist so komplex das es Massig Grauzonen und Ungereimtheiten gibt. (siehe http://www.comeaucomputing.com/iso/cwg_active.html)
Unser alter Prof hat immer gesagt vermeidet Grenzwertige Bereiche von C++ wenn Ihr nicht gerade einen Allerweltskompiler wie VS benutzt.

C++ ohne Exceptionhandling? Beispiel bitte.

VERIX !!! Ein VeriFone Betriebssystem für Bezahlterminals. Unterstützt C++ mit STL und allem drum und dran. Nur keine Exceptions.

Du magst durchaus Recht haben, dass fast jedes Konzept irgendwo eine sinnvolle Verwendung finden kann. Deine Beispiele sind allerdings Paradebeispiele dafür, wo man sie NICHT verwenden sollte.

Globale Objekte benutze ich genau da wo dieses Applikationsweit einmal existiert und von vielen Modulen benutzt wird. Da ist der MUTEX DASSS Paradebeispiel für !

Du meintest Dogmen!?

Ich meine Paradigma im Sinne von Lehrmeinung, Denkmuster, grundlegende Weltsicht !
Aber du hast Recht. Dogma trifft es eher.

Faustregeln sind nicht in Stein gemeißelte, universelle Gesetze, sondern Leitfäden für gute Praxis. Wer ihnen blind folgt ist nicht besser als wer sie ignoriert...

Genau das was ich sage ! Ich vertrete nicht die Meinung das goto toll ist. Nur die Tatsache das es in der Vergangenheit schwer missbraucht worden ist (Code ala C64 usw.) heißt nicht das es heute geächtet werden muss.
Es hat bestimmt einen Grund das es goto in C# immer noch gibt. Das gleiche gilt für globale Variablen. Es gibt Anwendungsfälle da kannst du dich tot machen indem du ein und das selbe an hunderte Methoden/Funktionen übergibst. Ob das so Sinnvoll ist (auch im Bezug auf Lesbarkeit) muss von Situation zu Situation neu entschieden werden.

Oder du packst die innere Schleife in eine Funktion, was wohl sowieso angebracht wäre, da das Ding offenbar relativ komplexe Logik beinhaltet...

Das Problem mit dem Aussteigen bleibt, ob die Schleife nun komplex ist oder nicht. Und prinzipiell immer in eine Funktion packen ... weis nicht so recht. Auf Seite 64/65 im kernighan ritchie ist das Schleifenproblem als Beispiel für eine Sinnvolle Anwendung von goto in C angegeben.
Dort kann man Exceptions dann eben nicht verwenden. Aber nur weil es tatsächlich Bereiche wie manche Embedded Systeme oder Teile eines Betriebssystemkernels gibt, wo Exceptions aus bestimmten Gründen keine Option sind, heißt das noch lange nicht, dass man Exceptions im Allgemeinen nicht verwenden sollte...

Ich habe kein Wort davon gesagt das man Exceptions nicht verwenden soll. Ich selbst liebe die Dinger förmlich. Es ging um Exceptions in Konstruktoren und da gehen die Meinungen auseinander.
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »stef« (01.12.2012, 22:56)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

38

01.12.2012, 22:52

Also im Embeddedbereich wird wirklich kaum mit Excetions gearbeitet und auch andere "luxeriöse" Dinge einer Sprache fallen raus (begrenzte Rechenkapazitäten) allerdings ist das ein ganz anderes Teilgebiet und das kann man eigentlich kaum zum Vergleich heranziehn. Meistens wird in reinem C programmiert und das dann noch mit ASM Optimierung.

Interessante Diskussion übrigends.
Was? Ich habe jetzt schon auf mehreren Embedded Systemen gearbeitet und mache das noch immer. Exceptions waren immer vorhanden, im jetzigen System läuft die Anwendung sogar unter Java. Soll nicht heißen, dass das überall so ist. Aber C und ASM ist heute wirklich nicht mehr oft anzutreffen. ASM schon echt gleich gar nicht.

Wenn ich versuche eine Exclusiv-Resource mit einem MUTEX / CriticalSection in 15 Threads zu schützen dann deklariere ich das Objekt global und mache es mit extern den jeweiligen Threadfunktionen zugänglich.
Das machst Du vielleicht so. Das heißt aber nicht, dass das eine gute Praxis ist.

Das Objekt mühevoll 15 Threads per Zeiger zu übergeben ist völlig unsinnig, zeitaufwändig und unübersichtlich.
Nein. Aber für globale Variablen trifft das aber zu.

Das selbe gilt für Datenbankverbindungen wenn diese von allen Threads benutzt werden.
Nein, falsch. Genau dafür gibt es Connection-Pools. Globale Variablen für Datenbankverbindungen in Threads sind so ziemlich die schlechteste Idee, die ich kenne.

Hier einen Konstrukt zu bauen das alle Schleifen ohne GOTO verlässt ist zeitaufwändig, mühevoll, unübersichtlich und oben drein noch fehleranfällig.
Nein. Goto ist unübersichtlich. Ist es schon immer gewesen. Wie dot schon sagte, deutet das eher darauf hin, dass Du einen zu langen Code hast, der sinnvoller in Funktionen aufgeteilt werden sollte. Genau das blockierst Du mit einem GOTO übrigens ganz schnell. ... Moment mal, reden wir hier ernsthaft darüber, ob man GOTO verwenden sollte? Ich meine... WHAT THE FUCK? :dash:

C++ ist so komplex das es Massig Grauzonen und Ungereimtheiten gibt. (siehe http://www.comeaucomputing.com/iso/cwg_active.html)
Da widerspreche ich auch nicht. Aber das Verhalten eines Konstruktors in welchem eine Exception geworfen wird, ist und bleibt wohldefiniert.

VERIX !!! Ein VeriFone Betriebssystem für Bezahlterminals. Unterstützt C++ mit STL und allem drum und dran. Nur keine Exceptions.
Gut, dann geht das dort eben nicht. Das ändert aber nichts daran, dass man es dort benutzen sollte, wo es geht. Nur weil es in einem speziellen System nicht geht, heißt das noch lange nicht, dass man es überall anders auch so bescheiden lösen sollte.

Globale Objekte benutze ich genau da wo dieses Applikationsweit einmal existiert und von vielen Modulen benutzt wird. Da ist der MUTEX DASSS Paradebeispiel für !
Mutex ist ein Paradebeispiel für eine statische Variable verwendet von schlechten Entwicklern. Es ist kein Paradebeispiel für eine globale Variable.
Ich z.B. würde selbst das anders lösen. Nämlich den Mutex oder die Semaphore VOR den Threads erzeugen und jedem Thread dies übergeben. Da braucht man weder eine statische, noch eine globale Variable.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »BlueCobold« (01.12.2012, 23:05)


stef

Treue Seele

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

39

02.12.2012, 00:00

Das machst Du vielleicht so. Das heißt aber nicht, dass das eine gute Praxis ist.

Stell dir vor du schreibst eine Applikation in der mehrere Threads auf ein Gerät zugreifen das über RS232/COM1 am Hostrechner angeschlossen ist.
Die Threads öffnen ab und zu mal COM1 senden was raus und schließen COM1 wieder. Um zu verhindern das es beim öffnen von COM1 kracht schachtelst du die Zugriffe in eine CS.
Bei zwei Threads übergebe ich die CS vielleicht noch als Pointer an die Threads einzeln. Bei 30 Threads möchte ich den Entwickler sehen der die CS nicht global deklariert.
Nenne mir einen vernünftigen Grund die CS irgend wo zu verbergen und via Zeiger an alle Threads einzeln zu übergeben außer "Weil man es so macht ..." !

Nein. Goto ist unübersichtlich. Ist es schon immer gewesen. Wie dot schon sagte, deutet das eher darauf hin, dass Du einen zu langen Code hast, der sinnvoller in Funktionen aufgeteilt werden sollte. Genau das blockierst Du mit einem GOTO übrigens ganz schnell. ... Moment mal, reden wir hier ernsthaft darüber, ob man GOTO verwenden sollte? Ich meine... WHAT THE FUCK?

Warum bezeichnen Bjarne Stroustrup, Dennis Ritchie und Brian W. Kernighan den Einsatz von GOTO exakt für dieses Beispiel als Sinnvoll ? (Ich gehe mal davon aus du weist wer die Herrn sind)
Warum ist GOTO immer noch Bestandteil von C# ?

Nochmal !!!
Ich halte hier kein Plädoyer für die Benutzung von globalen Variablen und goto.
Ich sage es gibt seltene Fälle in denen deren Einsatz sinnvoller ist, als auf Teufel komm raus zu versuchen Sie zu umgehen !

Bemerkung am Rande:
Es gibt auch einen großen Unterschied zwischen globalen Variablen (int, char usw.) und globalen Objekten die ihre Attribute durch eine Schnittstelle schützen !
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »stef« (02.12.2012, 00:10)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

40

02.12.2012, 00:13

Das machst Du vielleicht so. Das heißt aber nicht, dass das eine gute Praxis ist.

Stell dir vor du schreibst eine Applikation in der mehrere Threads auf ein Gerät zugreifen das über RS232/COM1 am Hostrechner angeschlossen ist.
Die Threads öffnen ab und zu mal COM1 senden was raus und schließen COM1 wieder. Um zu verhindern das es beim öffnen von COM1 kracht schachtelst du die Zugriffe in eine CS.
Bei zwei Threads übergebe ich die CS vielleicht noch als Pointer an die Threads einzeln. Bei 30 Threads möchte ich den Entwickler sehen der die CS nicht global deklariert.
Nenne mir einen vernünftigen Grund die CS irgend wo zu verbergen und via Zeiger an alle Threads einzeln zu übergeben außer "Weil man es so macht ..." !

Ehrlich gesagt klingt mir das ganze Beispiel ziemlich merkwürdig. Was genau macht es für einen Sinn, mehrere Threads auf die selbe COM Schnittstelle schreiben zu lassen? Spontan würd ich jedenfalls mal sagen, dass die Verwendung von Threads hier von vorn herein fehlgeleitet ist...

Werbeanzeige