Seite 11 von 18

Verfasst: 05.02.2006 01:56
von Batze
@MLK:
Wie will man denn was kompileren was erst später da steht?
Du kannst doch alles erst benutzen wenn es deklariert ist.
Konstanten, Variablen, Proceduren

Edit: Wieder mal jemand schneller und auch noch besser erklärt. :freak:

Verfasst: 05.02.2006 02:01
von freedimension
Batze hat geschrieben: Edit: Wieder mal jemand schneller und auch noch besser erklärt. :freak:
Mach dir nichts draus, nächstes Mal lasse ich mir etwas mehr Zeit ;)

Verfasst: 05.02.2006 02:08
von MLK
freedimension hat geschrieben:
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?
so schwer ist das doch nicht zu realisieren. sollte meiner meinung nach dringend gemacht werden. ist das in anderen sprachen auch so?

Verfasst: 05.02.2006 03:08
von MVXA
Danke dir, Deeem :)

Verfasst: 05.02.2006 03:42
von Toshy
Hallo.
Danke erstmal, ich wußte bisher nicht das es ein SinglepassCompiler ist.
Bisher hatte ich meißt eine Include für alle Declarationen und daher stand sie am anfang, jetzt aber baue ich fast zu 100% auf Proceduren und da kam das Problem wohl auf.

Und Batze, wie schon angemerkt von ich glaube freedimension kann man sehr wohl sachen verwenden die erst später im Text kommen. Entweder wenn es der Compiler mehr als einmal durchläuft, oder selbst dann, wenn die interne umwandlung das zulassen würde.

Es ging ja nicht darum eine globale Variable zu nutzen die noch nicht global declariert wurde, sondern das diese Variable vorkommt im Code bevor sie declariert wird.
Wenn man nun mit Proceduren arbeitet kommt das eigendlich ständig vor.
Diese werden oft durch includes eingebunden und da PB nun sogar nur die Proceduren einbindet die man auch aufruft wäre es doch an sich blöd wenn man variablen bzw. globale Variablen IMMER declariert, obwohl sie in diesem programm nicht genutzt werden. Deshalb lasse ich das oft die proceduren übernehmen und dann steht das halt nicht am Anfang und wenn ich es manuell mache, dann müßte das immer vor dem includeaufruf sein.
ist ja kein problem wo ich es jetzt (wieder) weiß, aber kann schon mal ein paar Probleme bereiten.

Ich werde das alles später oder morgen mal testen und mich dann an die Mutexfunktionen rann machen.

[edit]
TryLockMutex(Mutex), wie funktioniert das? Ich werden wohl aus dem englischem Satz dazu nicht schlau, denn egal was ich versuche, bei aufruf bekomme ich immer nur ne NULL zurück. egal ob ein Thread oder mehrere TryLockMutex(Mutex) aufrufen oder einer nur LockMutex(Mutex)
und der andere TryLockMutex(Mutex), egal ob der eine gerade gelockt ist oder nicht. irgenwas verstehe ich daran nicht. kann mir jemand mal den unterschied zwichen Beiden erklären.
Danke
Toshy

Lange lebe Purebasic 12.94

Verfasst: 05.02.2006 04:09
von al90
Also dann erstmal auch ein lob von mir. PB40 Ist echt gut geworden. :allright:

Hab auch schon eins meiner Projecte (in 2 stunden) angepasst und bin begeistert
wie einfach es war. (Hatte es mir vorher komplizierter vorgestellt)
Das mit den Lokalen Arrays ist sicher noch ein problem der frühen Beta
und ich denke daß das PB-Team das auch noch in den griff bekommt.

Eine sache macht mir allerdings noch Kopfschmerzen. Das wegfallen des
UseDirectory() Befehls. Habs bis jetzt noch nicht hinbekommen ein Verzeichniss komplett mit unterdirs auszulesen, muss dabei aber auch sagen
das ich es nur ein paar minuten probiert habe. Na denn, immer weiter so. :allright:

Verfasst: 05.02.2006 12:28
von freedimension
al90 hat geschrieben: Das mit den Lokalen Arrays ist sicher noch ein problem der frühen Beta
und ich denke daß das PB-Team das auch noch in den griff bekommt.
Was meinst du mit "den Lokalen Arrays"?

@Friedrichs: Es gehört zum guten Programmierstil, seine globalen Variablen möglichst zusammen und an erster Stelle zu deklarieren. So kommt es erst gar nicht zu Problemen.

Verfasst: 05.02.2006 12:56
von AndyX
jaPBe funzt gottseidank größtenteils mit der 4.0 Beta :)

Verfasst: 05.02.2006 14:56
von Agent
Auch ich kann nur sagen, dem Changelog nach zu Urteilen: Gratz zur v4! Viele Änderungen drin, die ich schon lange vermisse ;) Freue mich schon auf die Final (mit Help ;))

Gleich ne Frage zu SetGadgetColor(), wird dort auch transparent verfügbar sein (für den Background)??
Und:
Im Test war merklich zu spühren, wenn ich ein Gadget zeichne, dann die Farbe(n) ändere, kann beim Start des Programms die Änderung der Farbe(n) "mitverfolgt" werden, d.h. die Farbänderungen am Gadget passieren stark zeitverzögert! Zwar lies sich die Verzögerung nicht zeitlich messen (via elapsedmilliseconds), sichtbar war sie aber locker.

Verfasst: 05.02.2006 15:11
von freak
Die neue Farbe kann erst gezeichnet werden wenn das Fenster die WM_PAINT Nachrichten verarbeitet.
Das passiert aber erst wenn du WindowEvent() oder WaitWindowEvent() aufrufst.
(das ist unter Windows eben so)
Wenn man also das Fenster öffnet, die Farbe ändert, dann aber noch einige andere
Sachen macht befor der Event-Loop startet, dann sieht man das eben.

Es hilft hier das Fenster mit #PB_Window_Invisible zu erstellen, alle Gadgets
zu erzeugen und Farben zu ändern und es dann erst mit HideWindow() anzuzeigen.
(sieht übrigens generell besser aus wenn man es so macht, weil man sonst oft
auch den Aufbau der Gadgets sieht, wenn der PC beim Starten des Programs gerade voll ausgelastet ist)