Threading
Übersicht

![]() |
BtbNBetreff: Threading |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mich hat es immer gestört, das Threading nur auf Windows funktioniert, obwohl es doch so schön ist.
Deshalb habe ich mit der pthread-lib ein Threading-Modul für Linux geschreiben. Funktionierte sogar auf anhieb! Links: Edit: *vergesst es* Ich habe das Windows-Threading-Modul von Kev aus dem bb.com-Forum mit beigepackt, damit man ein Modul für Windows und Linux hat. Was haltet ihr davon? |
||
- Zuletzt bearbeitet von BtbN am So, Feb 25, 2007 15:57, insgesamt einmal bearbeitet
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für MacOS kann man den Linux C-Quellcode auch fast unverändert übernehmen, da ja MacOSX ein BSD-Unix ist und somit Linux-Kompatibel ist...
Einzigste Änderung: Code: [AUSKLAPPEN] Import "-std=c99" ' <-- hier, Import "-lpthread" gibts nicht...
Import "macthread.c" '<-- hier muss man halt anpassen... Extern Function CreateThread(threadfunction())="bmx_createthread" EndExtern @BORNtobeNAMELESS, kannst du dies in deinem Import auch noch übernehmen? Statt linthread.bmx/c, nimm doch unixthread.bmx/c ... oder neutral: posixthread.bmx/c |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, hab das jetzt ma so eingebaut, weiß aber noch nicht, obs auf Mac läuft, könnte das mal wer für mich testen, hab keinen Mac?
@rema: Thx, hoffe das funkt so. Ich hab jetzt noch nen Extra bereich für Mac gemacht, damit man das besser anpassen kann, fals nötig. Links sind die selben. |
||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wen du in meiner Signatur unten schauen würdest, so würdest du sehn das ich einen Mac habe...
Habe aber nur dein Example im thread.bmx getestet. Und es funktioniert perfekt. Selber habe ich die Infos aus dem Buch: Objective-C und Cocoa vom SmartBooks Verlag, Seite 412, Kapitel Multithreading - die Programmierung mit Threads http://www.amazon.de/exec/obidos/ASIN/3908497205 Ich hoffe dies konnte überzeugen... ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab schon gelesen, dass du nen Mac hast, aber jeder darf doch testen, nicht nur du ^^
Und es freut mich, dass es klappt, hätte nicht gedacht, dass das so einfach ist. Im Englischen Forum sagen einige, das BMax mit Thread immer abstürzen würde, davon merke ich allerdings bisher sehr wenig. Nebenbei möchte ich noch auf Etwas aufmerksam machn: In Threads muss mann, wenn man zeichnen will, dort extra Graphics aufrufen. Bilder für das Hauptprogramm in Globalen laden sollte aber gehen. Auf die weise wäre es theoretisch möglich, 2 Graphics-Fenster aufzureißen, oder GUI mit Graphics-Fenster zu kombinieren |
||
![]() |
Blacal |
![]() Antworten mit Zitat ![]() |
---|---|---|
Servus
recht interresant. Das könnte man für Netzwerk zeug und sowas hernehmen, dass da nicht immer das ganze Programm warten muss. Aber für 2 Grafikfenster und son zeug würd ich dass so nicht machen, da das Syncronisieren fehlt. Gut, vieleicht gehts ja, hab bis jetzt nur mit Java in diesem Bereich etwas rumgespielt, und da gibts ja syncronize. Aber auf jedenfall gut, dass du des gmacht hast, des kann man für viele Sachen gut gebrauchen. |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die wohl populärste Anwendungsweise ist das abspielen einer Lade-Anim, während man große Daten läd.
Man sollte Threading nur sparsam verwenden, da BMax (NOCH!) nicht Thread-Safe ist. u.a. der GC hat große Probleme mit Threads -> Int-Handles benutzen. Ich hab das auch mal im Englischen Forum vorgestellt, gibt verschiedene Resonanzen: http://blitzbasic.com/Communit...opic=56207 |
||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann mal etwas Kleines für Mac und Linux schreiben und ausgiebig testen.
ot> rema und morszeck sind ein und dieselbe Person. Sieht man ja auch an der gleichen Hardware-Konfiguration in meiner Signatur hier wie auch im eng. Forum. <ot |
||
ElWinni |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
rema hat Folgendes geschrieben: Für MacOS kann man den Linux C-Quellcode auch fast unverändert übernehmen, da ja MacOSX ein BSD-Unix ist und somit Linux-Kompatibel ist...
Einzigste Änderung: Code: [AUSKLAPPEN] Import "-std=c99" ' <-- hier, Import "-lpthread" gibts nicht...
Import "macthread.c" '<-- hier muss man halt anpassen... Extern Function CreateThread(threadfunction())="bmx_createthread" EndExtern @BORNtobeNAMELESS, kannst du dies in deinem Import auch noch übernehmen? Statt linthread.bmx/c, nimm doch unixthread.bmx/c ... oder neutral: posixthread.bmx/c Hi, auf meinem Intel iMac Core Duo hatte ich Probleme mit der macthread.c auf BlitzMax 1.18. Mit dieser Version hier funktioniert aber alles einwandfrei: Code: [AUSKLAPPEN] #include <stdlib.h> #include <pthread.h> long bmx_createthread(void *functionC()) { int rc1; pthread_t thread1; pthread_attr_t stack_size; pthread_attr_init(&stack_size); pthread_attr_setstacksize(&stack_size, 1048576); rc1=pthread_create(&thread1,&stack_size,functionC,NULL); return (long)thread1; } Have fun, Winni |
||
--
"And I used to be such a nice guy." - Edward Norton in Fight Club |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Beinhaltet das Modul eine Modifikation des GarbageCollectors um ihn Multithreading tauglich zu machen? (Mutex oder etwas entsprechendes) | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
ElWinniBetreff: Thread-Safety |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Beinhaltet das Modul eine Modifikation des GarbageCollectors um ihn Multithreading tauglich zu machen? (Mutex oder etwas entsprechendes)
Es ist lediglich ein Wrapper für die entsprechende API-Funktion des Betriebssystems zur Erzeugung eines Threads. Es werden keine weiteren Funktionen für die Serialisierung/Synchronisation von Speicherzugriffen bereitgestellt und es gibt auch keinen Patch für den Garbage Collector. Es ist ein netter Anfang, um in BlitzMax mit Multithreading zu experimentieren, aber die eigentliche Arbeit muß noch von Mark Sibly erledigt werden - der auch schon Interesse in dieser Richtung bekundet haben soll. Wäre schon cool, wenn wir in BlitzMax eine Threadklasse und einen multithreading-kompatiblen Garbage Collector ähnlich wie in Alaska Softwares Xbase++ bekämen. |
||
--
"And I used to be such a nice guy." - Edward Norton in Fight Club |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group