Threading mit BlitzMax(nur Windows)

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Jan_

Ehemaliger Admin

Betreff: Threading mit BlitzMax(nur Windows)

BeitragDo, Aug 11, 2005 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Also,

erstmal, es ist nciht von mir, ich will es der Deutschen Kommunity nur näher bringen.
Ich habe es nur noch einmal aufbereitet, und 1-2 Fehler entfernt

Author:Antony Wells
respekt ihm.

hier der Download:
http://www.blitz-pasting.net/i...amp;id=126
Habe mit Bmax 1.10 schonmal vorkompiled für euch!

Also,
h2use:
BlitzBasic: [AUSKLAPPEN]
'Den Thread Mod mit Compilen
Import pub.thread

Graphics 640,480,32,60

'Einstellen und Starten der Threads
load:TThread = TThread.Create( Laden )
show:TThread = TThread.Create( Anzeige )
load.Run()
show.Run()

'Globalen zum übergeben der Daten an das Hauptprogramm
Global geladen:Byte=0

'ein Thread
'hier könnten zum Beispiel, Sounds, Grafiken, Texturen, Modells ... geladen werden
Function Laden(bb_func:Byte Ptr)
geladen=0
Repeat
Ladezeit:+1
Delay 1
Until Ladezeit=10000 ' 10 Sekunden
geladen=1
End Function

'noch ein Thread!
'dieser ist zur permanenten Anzeige,
'z.B. Animationen, die Geschichte wird erzählt,
'ein Video wird abgespielt ...
Function Anzeige(bb_func:Byte Ptr)
Local m
Local ladezeit=MilliSecs()
Repeat
Cls
m=m+1
SetRotation 0
DrawText \"Ein schöner Ladebildschirm ist echt was kewles!\",0,0
DrawText \"Lädt seit: \"+(Float(MilliSecs()-ladezeit)/1000.0)+\"Sekunden\",0,20
SetRotation m
DrawRect 320,240,100,10
DrawRect 320,240,-100,-10
Flip
Until geladen ' der Thread geht zuende, sobald der andere sagt, ich Bin ferit gmit laden.

End Function


'Hauptschleife:
Repeat

Delay 10
Until geladen'sie wartet acuh, bis die Threads fertig sind.

'und nun ab zum Game!
'game()


Achtung, alle daten, wo mehr als 1 Thread drauf zugreifen, müssen Global sein!
Achtung, die threads laufen nebeneinander!
sobald ihr einen Thread mit tthread.SetPriority(ne sehr große Zahl) macht, kackt nciht nur euer windows ab(win 95-me), sondern auch alle anderen Prozesse, bis dieser fertig ist.
falls es einer ist, wie der Anzeige Thread oben, habt ihr fast eine Endlosschleife!

Also, viel Spaß!
between angels and insects

bruZard

BeitragDo, Aug 11, 2005 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wirklich ausgezeichnet ... nur schade dass es ausschliesslich unter Win funktioniert.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Jan_

Ehemaliger Admin

BeitragDo, Aug 11, 2005 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, men kann aber leider auch keinen Fake Programmieren, weil es einfach vom Betriebssystem kommen muss :-/
between angels and insects
 

Nox

BeitragDo, Aug 11, 2005 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Kenne mich mit BlitzMAX nicht genug aus, aber es gibt doch z.B. unter Linux die pthread-Library für Multithreading. Funktioniert in etwa haargenau wie die API-Funktionen von Windows. Außer, dass sie andere Funktionsnamen und teilweise verschiedene Argumentelisten haben. Schade, dass ich kein BlitzMAX habe, sonst könnte ich vll einen Wrapper programmieren. Smile

Ihr solltet auch vorsichtig sein, wenn mehr als nur ein Thread auf ein und dieselbe Variable zugreift. Für diese Fälle könnte man beispielweise auf sog. "Events" zurückgreifen (siehe MSDN "CreateEvent"). Damit lassen sich die Threads erheblich besser synchronisieren. Und eigentlich ist das Setzen der Priorität auch nicht immer notwendig. Synchronisation ist alles. Wink

bruZard

BeitragDo, Aug 11, 2005 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Threads muss man ganz im allg. sehr vorsichtig sein und sich nicht darauf verlassen das der UBER-GarbageCollector irgendetwas für einen tut. Aber in Hinblick auf meinen mißglückten Versuch in B3D Streaming zu implementieren wäre dieses Modul wahrlich ein Schritt nach vorn.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Nox

BeitragDo, Aug 11, 2005 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz genau. Smile Vorallem darf man sich schonmal garnicht darauf verlassen, dass der fiese Scheduler von Windows so arbeitet, wie man es gerne hätte. Threads ohne optimale Synchronisation oder strukturiertem Aufbau führen früher oder später zu asynchronen Programmen oder bösen Deadlocks - mit ganz viel Glück direkt im Kernel, was einen Neustart zur Folge hat. Very Happy
 

Dreamora

BeitragDo, Aug 11, 2005 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Threading wär schon praktisch, vor allem in anbetracht der Dual / Quad Core Zukunft vor allem in Bezug auf Max3D ... hoffen wir, dass es spätestens damit dann ein offizielles Threading drin hat, dass Crossplattform arbeitet ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jan_

Ehemaliger Admin

BeitragFr, Aug 12, 2005 7:24
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, offizielles Threading, Dreamora, glaubst du da wirklich dran?
between angels and insects

bruZard

BeitragFr, Aug 12, 2005 8:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Jan_ hat Folgendes geschrieben:
hm, offizielles Threading, Dreamora, glaubst du da wirklich dran?


Warum nicht, es muss ja nicht von Mark kommen. LUA wurde auch von einem User portiert und ist nun Bestandteil des offz. Paketes.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Dreamora

BeitragFr, Aug 12, 2005 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Daran glauben: Irgendwo schon
Warum: Weil es Teile gibt im geplanten von Mark, dass ohne Multithreading wieder so scheisse is wie früher. Damit meine ich speziell Dinge wie Physik, Terrain und Netzwerk.
Speziell da langsam aber sicher MultiCore als Zukunft eingemeisselt ist, wirds über kurz oder lang kommen müssen sollte er nicht plannen die Sprache direkt als ernsthafte Sprache deklassieren zu wollen uns wieder auf "Spielesprache" zu stellen wie B3D
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Sebe

BeitragSo, Aug 14, 2005 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausserdem beherrscht PureBasic auch Threading und da wird Mark doch nicht riskieren, wegen so einer Lapalie schlechter dazustehen Wink

BtbN

BeitragSo, Dez 11, 2005 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, irgendwie funzt der DL nichmehr.
Wo bekommt man das denn noch her?
Oda wie wärs mit neu hochladen? ^^
Und dann direkt für 1.14 vorkompiliert, plz.

rema

BeitragMo, Dez 12, 2005 7:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst nur im eng. Forum mal suchen. Das ist keine Geburt von Jan_

Jan_

Ehemaliger Admin

BeitragMo, Dez 12, 2005 9:18
Antworten mit Zitat
Benutzer-Profile anzeigen
ist bei den Aktuellen sachen mit dabei, threading ist für Windows bei Bmax bereits includet!
between angels and insects
 

Ava

Gast

BeitragMo, Dez 12, 2005 9:35
Antworten mit Zitat
Kann mir mal jemand erklären, was das ist? Rolling Eyes

bruZard

BeitragMo, Dez 12, 2005 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du einen Teil Deines Programmes als eigenständigen Thread anlegst läuft dieser Teil parallel zum Rest des Programmes.
Beispiel: Du könntest, während das Programm Daten von der Platte liest, eine Animation abspielen.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Ava

Gast

BeitragMo, Dez 12, 2005 11:09
Antworten mit Zitat
Hm, achso. Aber das lässt sich mit OOP doch recht einfach programmieren so etwas. Und es ging doch auch vorher schon. Also ich hab das zumindest schon öfter mal so umgesetzt. Smile Laderoutine als Objekt anlegen und mit der Animation in einer Schleife ablaufen lassen. Blup. Smile

Jan_

Ehemaliger Admin

BeitragMo, Dez 12, 2005 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, das stimmt schon, aber hier wird das eigens von windows getrennt.

schönes Beispiel dafür ist Musik,
du startest du musik 1mal, aber laufen tut sie dann die ganze zeit.
between angels and insects

regaa

BeitragMo, Dez 12, 2005 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder endlich mal keine delays während eines tcp-handshakes.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

BtbN

BeitragDi, Dez 13, 2005 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir ja sehr leid, aber ich finde das nicht.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group