Threading

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

BtbN

Betreff: Threading

BeitragDi, Feb 07, 2006 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Feb 08, 2006 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Feb 08, 2006 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Feb 08, 2006 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Wink

BtbN

BeitragMi, Feb 08, 2006 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Feb 08, 2006 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Feb 08, 2006 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 09, 2006 2:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 19, 2006 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 19, 2006 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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.
 

ElWinni

Betreff: Thread-Safety

BeitragDo, Apr 20, 2006 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group