Unable to convert from Object(Object) to Object(Object) (MT)
Übersicht

![]() |
juse4proBetreff: Unable to convert from Object(Object) to Object(Object) (MT) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, ich habe mal angefangen mein Server zu programmieren... Jedoch gibts Probleme mit Multithreading im Zusammenhand mit Klassen... Hier mal mein Code:
BlitzMax: [AUSKLAPPEN] SuperStrict Hoffe die Kommentare genügen... EDIT: In der Zeile, wo der erste Thread erstellt wird, kommt die Fehklermeldung aus dem Titel |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] Self.fThread = CreateThread(Self.ThreadWork, Null) Hier ist der Fehler, nicht wahr? Du gibst beim Parameter eine Methode an, wo eine Funktion erwartet wird. Mache es anders: Gebe eine Funktion an, die die entsprechende Methode aufruft. (Null wird dafür durch das Objekt ersetzt.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann es sein, oder steh ich aufm Schlauch...
Aber ist eine Methode keine Funktion? Aber ich werde trotzdem mal probieren, deine Idee zumzusetzten (Obwohl ich auf viele globale Funkionen verzichten wollte ![]() |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Methoden sind objektbezogen. (Man kann "Self" verwenden, es gibt Polymorphie etc.)
Funktionen sind von Objekten unabhängig. Übrigens: Man kann Funktionen auch in Types deklarieren. So gibt es auch kein Problem mit "globalen Funktionen". ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
hää? Dann sind sie aber doch im globalen Namespace...
Ach ist ja auch egal... Danke für den Hinweis... ^^ Ich werd mich gleich ransetzten EDIT: LOL, jetzt sagt er mir, er kennt TMutex nicht? WTF? Das ist laut Dokumentation im BRL.Threads drin, oder? |
||
Portfolio |LinkedIn |XING |
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Build options auf threaded gesetzt? | ||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
omg... Ja das wars...
Aber... neues Problem... BlitzMax: [AUSKLAPPEN] SuperStrict An dieser Stelle: BlitzMax: [AUSKLAPPEN] Function Thread:Object(lObject:Object) funktioniert das Umcasten nicht, und wenn ich die Funktion so schreibe: BlitzMax: [AUSKLAPPEN] Function Thread:Object(lObject:tServerThread) Dann, sagt mir der Compiler, dass er ein OBJECT erwartet und kein tServerThread... (Ich finds ein bissl inkompetent, ab er egal) Welches Workarround gibts da? |
||
Portfolio |LinkedIn |XING |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also das er Object und nich tServerThread beim 2. Erwartet is klar. Aber beim ersten müsste eigentlich alles stimen. Was sagt der compiler denn genau? | ||
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
in der Zeile:
BlitzMax: [AUSKLAPPEN] Local lServerThread:tServerThread = tServerThread(lObject)
Schafft er das umcasten nicht, und kann die Methoden von lServerThread nicht verwenden, da so ein "Tried to access a Null-Object" kommt |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bist du sicher, dass dort ein Fehler liegt?
Bei mir funktioniert nämlich das umcasten wunderbar. Du solltest aber die Timer vor den jeweiligen Threads erstellen lassen, da diese rein theoretisch immer darauf zugreifen könnten. (Ich war eben am Code-Debuggen.) So wie es aussieht, vertragen sich Timer überhaupt nicht mit Threads. (Mir fiel auf, dass immer nur eine Zeile ausgegeben wurde. -> Endlosschleife in Waittimer) Schreibe dir einen eigenen Timer, der mit "Millisecs" und "Delay" arbeitet. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
juse4pro hat Folgendes geschrieben: in der Zeile:
BlitzMax: [AUSKLAPPEN] Local lServerThread:tServerThread = tServerThread(lObject)
Schafft er das umcasten nicht, und kann die Methoden von lServerThread nicht verwenden, da so ein "Tried to access a Null-Object" kommt wenn er sagt, das er kein null objekt verwenden kann, dann würde das bedeuten, das die parameter nicht korrekt übergeben werden, sprich lObject = Null. Kann aber echt nich finden, wo da der fehler leigt. Überprüf als erstes mal die build options. Dann probiers mal ohne framework. Vlt. fehlt einfach eine datei oder so (wobei da der compiler eigentlich meckern müsste) |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn er wegen eines Nullobjetkes Meckert ging das Casten ja, es wurde halt nur eine Null gecastet ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jaja. AAAAAber... Ich hab da mal n kleines beispiel gemacht:
BlitzMax: [AUSKLAPPEN] Type Test Das compilieren und linked funzt. Allerdings gibts nen assert beim ausführen. Schätze mal das folgender auch bei dir kommt: "Unhandled Exception:Attempt to access field or method of Null object" Das kommt bei null objekten. Da das auch bei ihm kommt, heißt das das der compiler self nicht an den thread übergeben kann (Da das ja das verwendete objekt für den thread is. Kann aber auch daran liegen, dass du eine funktion eines typs übergibst und zwar tServerThread.Thread (Glaub ich) |
||
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie idiotisch...
Tja also irgendwie hat BlitzMax das nochnicht so mit Threads... Ich werde mir eine Alternative suchen ![]() Aber Danke für die ganzen Tipp's... |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@juse4pro
Was soll hier idiotisch sein? Der Code läuft hier wunderbar, wenn man von dem Problem mit den Timern und einer fehlerhaft programmierten Längenabfrage mal absieht. Welche BlitzMax-Version verwendest du? (Ich nutze gerade die Version 1.40 auf einem Windows Vista.) Ich habe noch nie Probleme mit Threads an sich gehabt. (Okay, ein paar Module sollten irgendwann einmal threadübergreifend lauffähig sein, aber Threads an sich haben keine mir bekannten Probleme.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mein.. "idiotisch" bezieht sich auf die Eingeschränktheit, der CreateThread Funktion...
Und Ich finde es wortwortlich fabelhaft, dass der Code bei dir läufft, denn bei mir eben nicht, ich habe versucht, alles umzusetzten, was mir gesagt wurde... Ich habe auch BlitzMax 1.40 auf Vista (32 Bit... auf einem 64 Bit Rechner [Fragt nicht wieso : / ]) Kannst su mal den "funktionierenden Code" posten, bitte? ![]() Juse |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] SuperStrict Hier ist er. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh... ok, also hast du nur die Timer umschrieben, okay.
Aber kann es bei Millisecs() nicht passieren, dass 2 Thread auf die globale Variable von Millisecs() zugreiffen, und alles abschmiert? |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zwei Dinge:
1. Was für eine globale Variable meinst du? Ich sehe da keine dieser Art bei brl.Blitz. 2. Threads können gleichzeitig auf Daten zugreifen, solange sie alle nur Daten lesen. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh okay, erklärt einiges.
In der Modulbeschreibung steht "accessing..." und ich dachte damit meinen die schreiben und lesen, also eben zugreifen. Und ok, ich dachte, dass die das mit einer globalen Variable machen, aber anscheiend nicht. ![]() EDIT: Zufälliger MAV... Warum? Eigentlich sollte das nicht passieren, das ServerThread Objekt wird nach dem starten nicht mehr angerührt... (ausser vom Thread selber) |
||
Portfolio |LinkedIn |XING |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group