Seite 10 von 18

Verfasst: 04.02.2006 22:04
von Deeem2031
MVXA hat geschrieben:2. Tun wir mal so als wenn im SourceCode jetzt 5.0 steht. Wird die
Zahl als Float oder als Double angesehen? Kann man das irgendwie
einstellen als was das gesehen werden soll?
Das dürfte die Frage beatworten:

Code: Alles auswählen

Debug 0.2
f.f = 0.2
Debug f
d.d = 0.2
Debug d
Warum sollte man auch floats nehmen, wenn man doubles hat? Der FPU ist das eh egal (soll heißen es ist gleich schnell).

Verfasst: 04.02.2006 22:12
von strgalt
Nabend,

Nu muss ich das leider nochmal einschmeissen - ist wohl bei der Menge untergegangen:

Wann wird die Database- Lib mit GetDatabaseDouble und GetDatabaseQuad aktuallisiert?

Verfasst: 04.02.2006 22:13
von Andre
Erstmal finde ich es auch sehr erfreulich, dass die meisten PB-User Gefallen am PB v4 Update finden... :allright:
Didelphodon hat geschrieben:Ich hab mal eben schon angefangen an einem Code-Konverter zu schreiben. Wenns "öffentliches" Interesse daran gibt, dann schreib ich ihn etwas allgemeiner und flexibler in der Konfiguration (ansonsten brauch ich ihn ja nur auf meine Bedürfnisse auslegen.
Wenn Du öffentliches Interesse mit öffentlicher Mitarbeit verbinden willst, kannst Du den Converter-Code auch im PureWiki auf www.PureArea.net einstellen. Einfach eine entsprechende neue Seite aufmachen, danach kann diese samt Code jederzeit online editiert werden. Dann machen vielleicht noch mehr mit :allright:

Würde alternativ sicherlich auch übers Forum gehen (da geht aber eben nur neue Beiträge posten, während es im Wiki immer eine Seite bleibt - samt Versionsgeschichte)

Nachtrag: Ich habe auch ein ganz persönlich großes Interesse an einem Converter (am besten mit Batch-Funktion) - wenn ich da so an das Umwandeln des CodeArchivs denke... :wink:

Verfasst: 04.02.2006 23:47
von Toshy
Ohne große Englischkenntnisse ist das zwar schwer zu verstehen, aber ich beiße mich durch. Macht trotzdem Spaß. Ich wollte jetzt mal die Mutex testen, bin aber schon an anderem gescheiter.
Zwar habe ich mitbekommen, da alles erstmal lokal ist (auch arrays) und erst auf global gesetzt werden muß. aber wie läuft das nun?
Ich dachte, sobald ich im "Haupcode" eine variable auf global setzte ich sie überall bekannt, aber das stimmt wohl nur begrenzt.
In Proceduren ist sie bekannt in Proceduren die als Thread ausgeführt werden nicht (jaPBe ohne "Threadsafe genutzt).
Dort geht es erst, wenn ich die Variable mit shared nutze und zwar MIT Variablenbezeichener.

Code: Alles auswählen

Procedure thread()
; ohne shared wird s nicht angezeigt
  ;Shared s hier auch nicht, gibt nen fehler
  ;Shared s.s, hier klappt es wohl
  Debug s
  While 1
    Delay(1)
  Wend
EndProcedure

ThreadID1 = CreateThread(@thread(),1)
  
Global s.s
s = "test"
  
While 1
  Delay(1)
Wend
  
Ich habe das jetzt durch viel testen hinbekommen, da ich wohl was nicht verstanden habe.
Ist dieses Verhalten aber nun Absicht oder ist dies ein fehler?

Global wird in bezug auf die Nutzung bei Thread dann wohl sinnlos, denn man muß shared nehmen und wenn man "global" wegläßt, geht es auch.

[edit] Ach ja, muß ich dann bei jedem Thread für die selbe Variable immer wieder shared nehmen oder nur bei einem bzw. gibt es probleme wenn ich das bei mehr als einem nehme?
Gilt "shared" dann nur für den Thread oder für die eine Procedure (habe damit noch nicht gearbeitet), muß ich also ab pb4 statt einmal "global" zu nehmen für jede Procedure "shared" anlegen?

Gruß
Toshy

Verfasst: 05.02.2006 00:00
von Eric
Das hat nichts mit Threads zu tun und eine Funktion 'weiß' auch nicht,
dass sie ein Thread ist.

Aber du kannst eine Variable erst verwenden, wenn sie definiert ist,
du musst das

Code: Alles auswählen

Global s.s
s = "test"
(das Global s.s sollte allerdings reichen)

über Procedure thread()
setzen.

Verfasst: 05.02.2006 00:19
von freak
übrigens geht jetzt auch

Code: Alles auswählen

Global s.s = "test"
;)

Verfasst: 05.02.2006 00:21
von Toshy

Code: Alles auswählen

Procedure Thread1()
  ;Shared s.b
  Debug "als Procedure aufgerufen: " + Str(s)
EndProcedure

Procedure Thread2()
  ;Shared s.b
  While 1
    Debug "als Thread aufgerufen" + Str(s)
    Delay(1000)
  Wend
EndProcedure
  
Global s.b
s = 1

Thread1()
ThreadID1 = CreateThread(@Thread2(),1)
  
While 1
  Delay(1)
Wend
  
Also Global scheint nicht zu funktionieren, ohne Shared klappt da gar nichts mehr. Da "Global" aber noch existiert tippe ich auf einen Fehler.

Verfasst: 05.02.2006 00:25
von Deeem2031
Du musst das Global vor die Proceduren schreiben, das war aber vorher auch schon so..

Verfasst: 05.02.2006 01:44
von MLK
Deeem2031 hat geschrieben:Du musst das Global vor die Proceduren schreiben, das war aber vorher auch schon so..
ich habe immer noch nicht kapiert warum das so ist. ist das wirklich so gewollt oder einfach das ergebnis der umsetzung? global ist doch global, nicht ForwardGlobal..

Verfasst: 05.02.2006 01:53
von freedimension
MLK hat geschrieben:
Deeem2031 hat geschrieben:Du musst das Global vor die Proceduren schreiben, das war aber vorher auch schon so..
ich habe immer noch nicht kapiert warum das so ist. ist das wirklich so gewollt oder einfach das ergebnis der umsetzung? global ist doch global, nicht ForwardGlobal..
PB ist ein single pass compiler, d.h. er arbeitet den Quelltext nur einmal durch und übersetzt ihn dann direkt. Woher soll der Parser nun wissen, dass eine Variable innerhalb einer Prozedur im nachfolgenden Code einmal als Global definiert sein wird?