![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Programmierung > Nochmal Intuition Messages | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- 2 | [ - Beitrag schreiben - ] |
20.08.2006, 16:01 Uhr Reth Posts: 1860 Nutzer |
Hallo mal wieder! Hab noch mal ne Frage zu besagtem Thema. Ich bearbeite Intuition-Messages eines Fensters wie folgt: - vorschriftsmäßig alles eintragen und auf Messages warten - inner Schleife alle anstehenden Messages verarbeiten - zuerst alle Infos der Message kopieren, dann die Message replien - nun die Message bearbeiten: * zuerst MenuMessages * dann GadgetMessages * zuletzt IntuiTick Messages Wenn ich nun im Programm nen Menüpunkt anwähle, wird der gar nicht von Intuition registriert, es kommen immer nur IntuiTicks. Erst wenn ich den Menüpunkt sehr oft hintereinander anwähle, erfolgt eine Messagebearbeitung. Liegt das daran, dass ich alle Messages in der Schleife abarbeite und daher so viele IntuiTicks auflaufen, bevor die MenuMessage eintrifft? Oder gehen die MenuMessages bei der Menge an Nachrichten einfach verloren? Danke schon mal! Ciao [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 18:09 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Hmm, also ich würde eher sagen daß du irgendwas Falsch machst. An den IntuiTick Msg's kanns eigentlich nicht liegen und Intuition wird wohl auch keine Messages unterdrücken. Bei Intuition kannst du nur für Mousemove Messages angeben nur eine gewisse Anzahl zu ermöglichen. Am Besten wäre es wohl einfach deinen Code zu posten. Ggf ist dein Messageloop falsch, also in der Art von code:while(running) { Wait(signals); msg = GetMsg(Port); ... ... ReplyMsg(msg); } anstatt von code:while(wunning) { Wait(signals); while(msg = GetMsg(Port)) { ... ... ReplyMsg(msg); } } Erstere Version würde zwar weiterhin alle Messages bearbeiten, aber manche ggf Verzögert, d.h. du könntest eine Message bekommen die der Aktion garnicht entspricht. Die Messages werden von Intuition Alle in einer Liste verkettet, ich denke mal mehr als ein Paar 100 Bytes werden pro Message nicht benötigt, daß pro Sekunde maximal 1Kb an Intuitick Speicher benötigt wird an Speichermangel dürfte das also nicht Liegen. Messages immer so baearbeiten, dass nach einem Wait() alle Anliegenden Messages abgeholt werden, d.h. bis GetMsg()==NULL ist, nicht nur eine und dann wieder ein Wait(); [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 18:57 Uhr Ralf27 Posts: 2779 Nutzer |
Zitat: Wenn ich das richtig verstanden habe, dann kommt erst dann eine weitere Intuitick-Meldung, wenn die vorhergehende bestätigt wurde, bzw. erst ab diesme Zeitpunkt wird gerechnet. Insofern kann es nicht sein das zu viele auflaufen. Es läuft immer nur eine auf die dann wartet. Bzw. mach ich diese Beobachtung in meinem Programm und hab auch sowas schon hier im Forum gelesen. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 20:07 Uhr whose Posts: 2156 Nutzer |
@Reth: Das hört sich so an, als würde in Deinem Programm etwas verkehrt laufen. Ich vermute, Du hast bei dem Kopieren der Message einen Fehler drin, der dafür sorgt, daß die meisten Messages vor ihrer eigentlichen Bearbeitung "verworfen" werden, und/oder eine Race Condition, die letztendlich dafür sorgt, daß am meisten IntuiTick-Messages kopiert werden (weil diese recht zügig auflaufen). Dafür spricht, daß fast nur Intuiticks (die tatsächlich nur dann wieder kommen, wenn der erste Tick beantwortet wurde) "erfaßt" werden und nur "manchmal" die MenuMessages, wenn sie gehäuft auftauchen. Schau Dir Deinen Code bezüglich des Kopierens der Messages noch einmal genau an, auch die Bearbeitung der Message-Kopien. Nicht, daß Du da durch einen Flüchtigkeitsfehler aus den Kopien hauptsächlich Kopien der ersten IntuiTick-Message machst. Solche "Schnitzer" passieren schnell, wenn man die Bearbeitung der Messages zu beschleunigen versucht. Grüße -- --- ![]() ![]() [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 20:55 Uhr Reth Posts: 1860 Nutzer |
Hier mal der Messagebearbeitungscode:code:if ((!port) || (port == NULL)) return; cout << "Start message handling..." << endl; while (!closing) { /* Wait until we have recieved a message: */ Wait( 1 << port->mp_SigBit ); /* As long as we collect messages sucessfully we stay in the loop: */ while(struct IntuiMessage *my_message=(struct IntuiMessage *) GetMsg( port )) { IntuiMessageC intuiMessage(my_message); /* After we have read it we reply as fast as possible: */ /* REMEMBER! do never try to read a message after you have replied! */ /* Some other process has maybe changed it. */ ReplyMsg( (struct Message *)my_message ); if (intuiMessage.getClass() == IDCMP_MENUPICK) { cout << "nMenu pick!n"; cout << "Closing before = " << closing << endl; if (mnMsgRec != NULL) mnMsgRec->receive(intuiMessage); cout << "Closing after = " << closing << endl; /*closing = TRUE; cout << "Closing set = " << closing << endl;*/ } if ((intuiMessage.getClass() == IDCMP_GADGETDOWN) || (intuiMessage.getClass() == IDCMP_GADGETUP)) { cout << "nGadget selected!n"; if (gadMsgRec != NULL) gadMsgRec->receive(intuiMessage); } if (intuiMessage.getClass() == IDCMP_INTUITICKS) { cout << "IntuiTicks!" << endl; for (vector<ActivityC *>::iterator iterator = tickActivities.begin(); iterator != tickActivities.end(); iterator++) { cout << "In Loop!" << endl; IntuiTickActivityC *tickActivity = ((IntuiTickActivityC *)(*iterator)); cout << "Activity:" << tickActivity << endl; if (tickActivity != NULL) tickActivity->activate(); } } } } cout << "Message handling done..." << endl; } Wie gesagt wird replied bevor bearbeitet wird (eingangs schon erwähnt). Evtl. macht das Ärger? Hab ich ausm Bsp. Und hier der Kopiercode: code:void IntuiMessageC::setMessage(struct IntuiMessage *message) { this->msgClass = message->Class; this->code = message->Code; this->qualifier = message->Qualifier; this->mouseX = message->MouseX; this->mouseY = message->MouseY; this->seconds = message->Seconds; this->micros = message->Micros; this->IAddress = message->IAddress; } Das Einzige was mir hier evtl Ärger bringen könnte sind vielleicht die Kopien auf die Zeiger IAddress usw.? Ach ja: Wo findet man hier denn nochmal die möglichen Stylesheets?! Ärger mich gerad, da ich die hier immer nie entdecken kann! Ciao [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 21:35 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Das mag schon sein, aber wenn du Wait() aufrufst ohne dass Intuition SendSignal() aufruft wartest du dich zu Tode, die Message wird auch Ohne ReplyMsg() von Intuition in die Liste gepackt, wäre auch ziemlich dumm, wenn du z.B. zwei KeyDown Messages von Intuition für die Linke Maustaste bekommst ohne KeyUP, weil Intuition diese Nachricht nicht hat. Aber bei IntuiTicks kannst du schon Recht haben, daß keine weitere kommt bevor die Alte bearbeitet worden ist, wenn du irgendwo im Prog etwas machst, will man ja nicht Plötzlich 10000000 Intuiticks bekommen :-) gruss Darius [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 21:50 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: So sollte man das ja auch machen, wenn möglich. Zitat: das läßt sich doch einfach überprüfen, gib doch einfach nach GetMsg() die Ursprünglichen Daten aus, ohne Kopiercode, wenn da eine Diskrepanz besteht ist dein Code nicht Richtig. Zitat: das würde das Problem aber nicht Erklären, da das damit wohl kaum was zu Tun hat. AFAIK benutzt Intuition für Menus und Gadgets im gegensatz zu Windows die Ursprungs Struktur, damit Zeigt IAdress auf deine erzeugte MenuStruktur zum jeweiligem Menupunkt und die Adresse wird sich wohl nicht ändern, so daß du IAdress gewiss Ruhig auslesen kannst, ansonsten mach in deine Kopierfunktion einen neuen Member UserID oder so, der den Eintrag aus der MenuStruktur etc. direkt ausliest. [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 21:57 Uhr Reth Posts: 1860 Nutzer |
Woran kanns denn dann liegen? Daran, dass (wie Ralf meinte) bei IntuiTicks erst nach dem Bearbeiten replied werden sollte? Evtl. war ja die endlich akzeptierte MenuMessage die erste von mir ausgelöste, nur dass alle inzwischen aufgelaufenen IntuiTicks zuerst bearbeitet werden? Ach und ja: Irgend ein Hinweis auf die Stylesheets für Codestyling hier im Forum? [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 22:02 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Du meinst jetzt das Hervorheben von Keywords & Co, z.B. im Code? unter Hilft/Text-Formatierungen http://www.amiga-news.de/forum/help_text.php [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 22:13 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Nee das hat Ralf nicht gesagt, sondern dass Intuition erst dann einen weiteren Intuitick sendet wenn der letzte schon beantwortet worde. Damit sich die Intuiticks nicht anhäufen. Normalerweise hängt Intuition jedes Ereigniss in eine Verkettete Liste damit Nachrichten nicht Verloren gehen, bei KEY und MOUSEBUTTON Events ist das wichtig, aber bei Intuiticks nicht so wirklich wie auch bei Mousemove Events. Wenn Intuition z.B. eine Mausposition unterschlägt ist das nicht so schlimm, aber es ist z.B. ziemlich unmöglich die Maustasten zweimal hintereinander loszulassen ohne dazwischen diese gedrückt zu haben. Es gibt hast Messages die eine Art Inverse Message haben z.B. KeyUP/KeyDown Diskinserted/Removed. [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 22:17 Uhr Reth Posts: 1860 Nutzer |
Zitat: Genau! Danke! [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 22:19 Uhr Reth Posts: 1860 Nutzer |
Zitat: Hm, ist beantworten nicht dasselbe wie den Reply auf die Message zu senden? In dem Fall könnte das ja bei mir der Grund sein? (Reply erfolgt wie gesagt vor Bearbeitung, so dass neuer Tick gesendet werden kann) Muss ich mal testen! Ciao [ - Antworten - Zitieren - Direktlink - ] |
20.08.2006, 23:00 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Sicherlich ist es das Selbe aber es würde dein Problem nicht erklären, denn ob ich nun msg = GetMsg() class=msg->class; ReplyMsg(msg); cout << class; oder msg = GetMsg(); cout << msg->class ReplyMsg(msg); schreibe ist völlig Egal, die erstere wird aber für Gewöhnlich benutzt, weil Intuition damit z.B. die Message freigibt und damit auch Resourcen. Zitat: Ja aber du sagst du bekommst zu viele Intuiticks und keine Menu Messages, ich wüsste jetzt nicht wie das eine zum anderen Passt. Intuition interessiert sich wohl nicht dafür, was du mit der Message machst, du müsstest eine Menu Message erhalten ob du nun ReplyMsg() vor oder hinter der Bearbeitung einer Intuiticks Message aufrufst. Intuition sorgt nur dafür dass nur eine Intuiticks MSG in der Schlange ist aber nicht mehr, anders ausgedrückt solange du eine IntuiTicks msg nicht beantwortest schmeisst Intuition Alle folgenden IntuiTicks Msgs ins Nirvana. Da ist Eindeutig was anderes Falsch, gebe doch nach dem my_message = GetMsg() die Nachricht direkt aus my_message = GetMsg(...); cout << my_message->Class; um zu sehen ob irgedwo in deinen C++ Classes Falsch ist [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 15:13 Uhr Holger Posts: 8116 Nutzer |
Zitat: Da bekommt man ja Augenkrämpfe... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 15:16 Uhr thomas Posts: 7721 Nutzer |
@Holger: doppelt gemoppelt hält besser ![]() Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 15:54 Uhr Holger Posts: 8116 Nutzer |
@Reth: Wenn Du code der Form code:ist das mindeste, dass Du den Anweisungen ein else spendierst if(xyz()==ABC) ...; else if(xyz()==DEF)...if (xyz() == ABC) { } if (xyz() == DEF) { } if (xyz() == GHI) { } Aber besser wäre hier wohl von vornherein, switch zu verwenden. Ausserdem ist die Vorgehensweise für eine korrekte Bearbeitung von MENUPICK nicht ausreichend, intuition erlaubt die Mehrfach-Selektion von Menüpunkten und speichert deren Status in den Menüpunkten selber. Also muss man schon vor der Beantwortung der MENUPICK-Message über die ausgewählten Punkte iterieren und diese Information in der eigenen Datenstruktur speichern, wenn man sie nicht sofort verarbeiten will, sonst überschneidet sich das mit einer möglichen neuen Menüselektion. Leider haben diese Fehler noch nichts mit Deinem aktuellen Problem zu tun...sie kommen noch dazu... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 16:25 Uhr Reth Posts: 1860 Nutzer |
Zitat: Wieso? Ist wohl eher ne Frage der Programming Guidlines, bzw. der eine machts so, der andere so! Zitat: Wenn es die Datentypen von IDCMP_MENUPICK, IDCMP_INTUITICKS etc. zulassen, dann ja! Ciao [ Dieser Beitrag wurde von Reth am 21.08.2006 um 16:28 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 16:28 Uhr Reth Posts: 1860 Nutzer |
Zitat: Ich bin halt nicht automatisch davon ausgegangen, dass: code:if ((!port) ... das gleiche ist wie: code:if ((port == NULL)... Hab ich noch nirgendwo bestätigt bekommen, aber auch noch nicht explizit danach gesucht. Und ich habe gelernt: Nur wenns zufällig klappt, heisst es nicht, dass es automatisch richtig ist! Kann ja sein, dass der Compiler immer automatisch auf NULL initialisiert, und daher die beiden Bedingungen zum gleichen Ergebnis führen?! Aber wehe er macht das mal nicht (mehr)! Ciao [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 16:32 Uhr thomas Posts: 7721 Nutzer |
Zitat: Nein. Wenn sich der Wert von xyz während der Verarbeitung ändert, kann es durchaus vorkommen, daß bei deinem Konstrukt mehrere Fälle ausgeführt werden. Wenn du eine Fallunterscheidung möchtest, solltest du auch eine Fallunterscheidung programmieren. Wenn du keine Fallunterscheidung, sondern mehrere aneinandergereihte Vergleiche möchtest, die alle wahr oder falsch sein können, dann solltest du das durch Leerzeilen und/oder Kommentare kenntlich machen. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 16:50 Uhr Holger Posts: 8116 Nutzer |
Zitat:Nein, wie thomas schon sagte, entweder oder. Wenn der Ausdruck in jedem Test den gleichen Wert liefern sollte, sollte das verwendete Sprachkonstrukt das auch reflektieren. Das heisst, Bedingungen, die gar nicht erfüllt sein können, auch nicht zu testen. Bei Switch wird der Ausdruck außerdem auch nur einmal ausgewertet. Das ist sauberer und effizienter. Wenn er dagegen nicht den gleichen Wert liefern sollte, brauchst Du uns auch gar nicht zu fragen, warum die Auswertung der Messages nicht funktioniert. Die Klasse einer IntuiMessage sollte sich jedenfalls innerhalb einer Auswertung nicht ändern. Zitat:Zitat:Wenn es die Datentypen von IDCMP_MENUPICK, IDCMP_INTUITICKS etc. zulassen, dann ja! Arrgh, welche Datentypen? Der Datentyp ist der, den Deine Methode IntuiMessageC::getClass() zurückliefert. Und wenn Du den mit Konstanten wie IDCMP_... vergleichen kannst, muss er wohl vom Typ int sein, womit switch funktionieren sollte. Wenn nicht, dann hätte ich noch eine Idee, warum Dein code nicht funktioniert... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 17:01 Uhr Holger Posts: 8116 Nutzer |
Zitat:Erstens: wenn Du in einer Sprache programmieren willst, solltest Du immer explizit nach dem suchen, was Du benutzt. Denn: Zweitens: Was bedeutet (!port)? Warum testest Du diese Bedingung? Was testest Du da? Und was bedeutet (port==NULL)? Warum führst Du diesen Test durch? Wenn Du glaubst, dass es zwei verschiedene Dinge sein könnten, was für zwei Dinge sollten das sein? code ist doch kein Selbstzweck, also was ist der Zweck dieses Tests, den Du da hingeschrieben hast? mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 21:32 Uhr Reth Posts: 1860 Nutzer |
Zitat: Da steh ich glaub auf dem Schlauch: Das Äquivalent zu XYZ kann sich bei mir während der Bearbeitung nicht ändern. Ich wollte mehrere aneinandergereihte Vergleiche programmieren und dazwischen sind bei mir zumindest Leerzeilen, also genau so wie Du anmerkst. Dass eine Fallunterscheidung hier besser ist seh ich ja ein. Ciao [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 21:33 Uhr Reth Posts: 1860 Nutzer |
Zitat: Also das Problem von Thomas und Dir scheint hier zu sein, dass ihr ja nur den Codeausschnitt kennt, den ich hier gepostet habe, den Rest jedoch nicht: Den Codeausschnitt für das Testen des Ports usw. hab ich aus einem Amiga-Bsp. Und ja, ich habe mich nicht darum gekümmert, was (!port) heisst, sondern den von mir noch notwendigen NULL-Vgl. drangehangen (man muss sich ja auch mal auf Code-Bsps. verlassen können, wenn die als solche angeboten werden!). Den Test auf NULL mach ich, da mir die Methode, welche mir den Port liefert NULL zurückgibt, wenn der Port noch nicht existiert! Verständlich oder? Zitat: Wie gesagt: Der Test (!port) ist aus einem Programmierbeispiel übernommen. Der Test auf (port != NULL) ergibt sich aus meiner Wahl der Klassen und ihrer Methoden! Ciao [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 21:45 Uhr Reth Posts: 1860 Nutzer |
So mal zurück zum Kernproblem: Ich habe mit obigem Code noch einen Test gemacht und nur einmal einen Menüpunkt angewählt (keine Mehrfachselektion o.ä.). Das Ergebnis war, dass ewig viele andere Messages (Intuiticks) abgearbeitet wurden, bevor die Menupick-Message dran kam. Das bedeutet aber, dass Intuition IntuiTick-Messagess in die Queue stellt, auch wenn die letzte dieser Messages noch nicht replied wurde! D.h. wiederum, ich müsste diese anders überspringen! Eine Änderung des Codes weg von den ifs hin zu einem switch() brachte wie erwartet keine Verbesserung! Ciao [ - Antworten - Zitieren - Direktlink - ] |
21.08.2006, 22:32 Uhr Reth Posts: 1860 Nutzer |
Schein die Ursache gefunden zu haben. Die äußere Schleife schliesst, wenn closing TRUE wird, was passiert, wenn der entsprechende Menüpunkt angewählt wurde (ist wie gesagt aus nem Bsp. übernommen). Die innere Schleife arbeitet aber alle noch ausstehenden Messages ab (was man ja machen soll, nach allem, was man hier im Forum so drüber gelesen hat). Stellt sich nur die Frage, ob ich die innere Schleife auch einfach abbrechen kann, wenn Closing auf TRUE ist, oder ob das Probleme mit Intuition etc. gibt? Wenn ichs recht weiss hat Thomas (glaub) dazu in nem anderen Thread mal gesagt, dass das gefahrlos möglich sei (also die innere Schleife abbrechen), wenn man dann das Fenster usw. schliesst wird alles von Intiution aufgeräumt. Mal testen... Ciao [ - Antworten - Zitieren - Direktlink - ] |
22.08.2006, 00:04 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Hmm, mit Menus habe ich micht noch nicht beschäftigt, aber während der Menuauswahl blockt Intuition mehr oder weniger das System, ggf. ändert das auch den Ablauf der Intuitick messages, dass dann doch mehrere Messages abgeschickt werden? Teste mal dein Programm ohne Intuitick Messages, also die Erzeugung dieser beim erstellen des Fensters abschalten und probiere auch aus, ob die dauer des runterhaltens der Rechten Maustaste sich auf die Anzahl der Intuitick Messages auswirkt, d.h. ob mehr Messages anliegen wenn du dir mehr Zeit bei der Menuauswahl nimmst. ggf. hast du MagicMenu installiert und das verursacht das Problem? An deinem Code kann ich jedenfalls nichts finden was den fehler verursachen könnte. [ Dieser Beitrag wurde von DariusBrewka am 22.08.2006 um 00:05 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.08.2006, 00:04 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Das ist so Richtig, bei einem CloseWindow() entfernt Intuition Alle zum Fenster gehörenden Messages. Ist ja auch irgendwie logisch, was willst du z.B. nach einem IDCMP_CloseWindow machen? wenn dann ein MouseMove auftritt den Wunsch des Users das Programm zu beenden ignorieren? [ - Antworten - Zitieren - Direktlink - ] |
22.08.2006, 01:16 Uhr Holger Posts: 8116 Nutzer |
Zitat:Nein, nicht im geringsten. Code-Beispiele dienen dazu, dass man versucht, ihre Funktionsweise zu verstehen, genaugenommen, dass man die zugehörigen Dokumentationen/Artikel besser verstehen kann, keineswegs dazu, dass man sie hirnlos in irgendwelche andere Software kopiert. Und wenn Du weißt, dass ein NULL-Test dazugehört und selber davon ausgehst, dass das code-Beispiel so korrekt ist, dass man es ohne den geringsten Anflug von Nachdenken kopieren kann, müsstest Du eigentlich auch davon ausgehen, dass schon längst ein NULL-Test im Beispiel enthalten ist. Der überflüssige zweite Test fällt von der Performance her natürlich nicht in's Gewicht. Die dahinterstehende Haltung dagegen, eine Art Lernverweigerung gegenüber der Tätigkeit, mit der man sich aus freien Stücken beschäftigt, ist bedenklich. Wenn es Dir schon zuviel ist, Dich um das Verstehen solch trivialer Elemente der Programmiersprache zu bemühen, ist Fingerfarbenmalen vielleicht ein empfehlenswerteres Hobby als das Programmieren. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ Dieser Beitrag wurde von Holger am 22.08.2006 um 01:21 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.08.2006, 08:39 Uhr Reth Posts: 1860 Nutzer |
Zitat: Wie ich schon geschrieben habe! Der NULL-Test kommt dazu, weil ich in der Methode, die mir den Port übergibt (nicht im hier geposteten Code enthalten!) NULL zurückgebe, wenn noch nicht initialisiert wurde! Zitat: Dann erklär doch mal! Wie ist das in C++ definiert? Werden dort alle Zeiger immer automatisch auf NULL initialisiert? Bei jedem Compiler? Sicher? Das bedeutet, dass in C++ immer und auf jedem System und bei jedem Compiler: C++ code:int *i; genau so angelegt wird: C++ code:int *i = NULL; (nur dann ist für mich !port und port!=NULL dasselbe!) Kann ich mir irgendwie nicht vorstellen, da NULL eine Typdefinition in den Amiga-Headern ist. Die kann auf anderen Systemen ganz anders ausfallen. Statt ellenlanger Abschnitte ohne hilfreichen Hinweis, kannst Du doch kurz 2 Zeilen posten und mein Wissensdefizit in dieser Hinsicht ausmerzen, oder nicht? Was bedeutet denn (!port) komplett ausgeschrieben in C++ bzw. bei der Programmierung auf dem Amiga? Ciao [ Dieser Beitrag wurde von Reth am 22.08.2006 um 08:40 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.08.2006, 08:58 Uhr Reth Posts: 1860 Nutzer |
Zitat: Für Dich scheint es relativ schwer zu sein andere Einstellungen als Deine zumindest zu akzeptieren (auch wenn man sie nicht gut findet). Zum Punkt "triviales Element der Programmiersprache" siehe vorhergehender Post. Wenn ich zu jeder Bibliothek, die ich z.T. täglich verwende erst deren Source analysieren und verstehen wollte, dann könnte ich nie irgendetwas anfangen zu programmieren! Nach Deinem Verständnis müssten dann (fast) alle Softwareentwickler weltweit Fingerfarbenmaler werden und dürften nie wieder programmieren! Man muss sich auf einige Dinge (die v.a. immer wieder gleich verwendet werden) auch verlassen können! (Oder programmierst Du Dir Dein if selbst, statt das entsprechende Konstrukt der Programmiersprache zu nehmen)? Ciao [ Dieser Beitrag wurde von Reth am 22.08.2006 um 08:59 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
-1- 2 | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Nochmal Intuition Messages | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |