Multithread nur ohne andere Module?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Multithread nur ohne andere Module?

BeitragFr, März 30, 2012 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.
Ich habe gerade ein klitzekleines Problem mit BlitzMax (am liebsten würde ich meinen PC ausm Fenster feuern).
Undzwar wollte ich das Programm, das ich momentan schreibe durh Multithreading beschleunigen.
Ich habe also ganz brav Code: [AUSKLAPPEN]
Import brl.threads
oben reingeschrieben.
Habe dann dort, wo die Threads erstellt werden sollen CreateThread mit den passenden Parametern aufgerufen.
Was mir schon gleich komisch vorkam: CreateThread und TThread wurden nicht vom Editor hervorgehoben (ich benutze BLIde).
Als ich dann versucht habe, das ganze zum laufen zu bringen kam die Meldung:
Zitat:
Compile Error: Identifier 'CreateThread' not found
Build Error: failed to compile


Okay, dachte ich mir, weil mir eingefallen ist, dass ich Threaded-Building ausgeschaltet hatte, dachte es könnte daran liegen.
Also das ganze in den IDE-Optionen angeschaltet.
Und siehe da: Er mekert nicht mehr wegen CreateThread.
Aber auch nur weil er nicht so weit kommt.
Er mekert jetzt, weil ich andere Module einbinde:
Zitat:
Compile Error: Can't find interface for module <NameDesErstenModulsInDerListe>
Build Error: failed to compile

Ich kann zwar augenscheinlich alles mögliche aus brl einbinden, aber bei pub oder bei meinen eigenen Modulen mekert er dann halt.

Ich msus dazu sagen: Das ist das erste Mal, dass ich mit Multithreading arbeite, aber mir aber auf blitzmax.com ein paar Beispiele angesehen.

Kann mir bitte jemand sagen, was ich falsch mache oder was ich machen muss, damit es klappt?
Muss ich außer brl.threads noch was einbinden, damit es geht?

Lg, M0rgenstern

ZEVS

BeitragFr, März 30, 2012 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Builden von Modulen kompilliert nur für Non-Threaded, wenn Threaded Build ausgeschaltet ist, sonst nur für Threaded. Das halbiert zwar die Build-Zeit, nervt aber in diesem Fall doch ganz schön. Module neu builden sollte helfen.

ZEVS

M0rgenstern

BeitragFr, März 30, 2012 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey ZEVS,
Vielen Dank. Das hat wirklich geholfen.

Leidr hänge ich jetzt an einem (irgendwie lustigen) Problem.
Hier erstmal die Fehlermeldung, mit der ich ehrlich gesagt nichts anfangen kann:
Zitat:
Compile Error: Unable to convert from 'Object(Object)' to 'Object(Object)'
Build Error: failed to compile


Unzwar beschwert er sich an folgender Stelle:
BlitzMax: [AUSKLAPPEN]
For Local li:TLight = EachIn tlAllLights
CreateThread(li.CheckReacheablePixels2, pix)
Next

pix ist einfach eine vorher ertsellte Pixmap.
Der Kopf der Methode sieht folgendermaßen aus:
BlitzMax: [AUSKLAPPEN]
Method CheckReacheablePixels2:Object(pix:Object)


Kann mir bitte jemand weiterhelfen? Wie gesagt, ich versuchs grade zum erstenmal. Für mich sieht soweit alles richtig aus. Muss man funktionen benutzen? Oder dürfen es auch Methoden sein?
Vor allem: Was zur Hölle will er mir mit der Fehlermeldung sagen?

Lg, M0rgenstern.

Lobby

BeitragFr, März 30, 2012 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, Du kannst eben nur Funktionen als Funktionspointer übergeben, Methoden sind hier nicht zulässig. Schreibe also einfach die Methode in eine Funktion um, und es sollte klappen Wink .
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux

M0rgenstern

BeitragFr, März 30, 2012 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh no.
Die Funktion bräuchte dann aber 2 Parameter....
Egal. schreib ich schnell ne Klasse zu.

Vielen Dank,
Lg,
M0rgenstern

Edit:
Funktioniert jetzt soweit. Vielen Dank.
Gelohnt hat es sich nicht. Ich kann im Schnitt nur 2 Sekunden rausholen.
Außerdem ist die Anzahl der zu bearbeitenden Objekte jetzt stark begrenzt.
Gibt es eine maximale Anzahl gleichzeitig laufender Threads?
Bei ein wenig mehr als 70 fliegt mir mein Programm mit einer "EXCEPTION_ACCESS_VIOLATION" um die Ohren. (Kann es leider nicht im Debug-Modus ausführen. Da läuft das Ding ne gefühlte Ewigkeit).

Lg, M0rgenstern

Propellator

BeitragFr, März 30, 2012 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Gibt es eine maximale Anzahl gleichzeitig laufender Threads?

Ja, steht sogar in der Dokumentation des Multithreading-Moduls. Die Begrenzung ist OS-abhängig.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

M0rgenstern

BeitragFr, März 30, 2012 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Dankeschön Propellator.
Dann werde ich das ganze ohne Multithreading machen.
Ist sowieso höchstens 5 Sekunden schneller (bei 70 Objekten).

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group