EnableSafeInit()

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

EnableSafeInit()

Beitrag von cxAlex »

InitNetwork(), InitEngine3D(), InitMovie(), InitScintilla()... Alles muss initialisiert werden, aber wenn man die Initialisierung 2* aufruft gibts nen Fehler. Ist schnell mal passiert, ein Include enthält irgendwo ein Init, das MainFile auch .... . Natürlich sollte man so programmieren das sowas nicht vorkommen kann, aber wenn man Includes von 3. aus dem Forum usw. verwendet kann das schon nerven. EnableSafeInit() verhindert das eine Init - Procedure 2* aufgerufen wird. Spart Zeit und Nerven.

Code: Alles auswählen

Macro _EndOfMacro1()
  EndM
EndMacro

Macro _EndOfMacro2()
  acro
EndMacro

Macro EndOfMacro()
:_EndOfMacro1()_EndOfMacro2()
EndMacro 

Macro EnableSafeInit(_Name)
  Procedure _#_Name
    Static isInit
    If Not isInit
      isInit = #True
      ProcedureReturn _Name
    EndIf
  EndProcedure
  
  Macro _Name
   _#_Name
  EndOfMacro()
EndMacro

; Zum Test deaktivieren
EnableSafeInit(InitNetwork())
EnableSafeInit(InitEngine3D())

Debug InitNetwork()
Debug InitNetwork()
Debug InitEngine3D()
Debug InitEngine3D()
Zwar Quick & Dirty aber Nervenschonend :mrgreen:

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

habe ich etwas unterschlagen ?
---------------------------
PureBasic
---------------------------
Zeile 34: 'EndMacro' fehlt.
---------------------------
OK
---------------------------
Ich habe es monatelang selber ersucht ein Macro in einem Macro zu machen, und bin gescheitert ... du auch ?

EDIT: hab ich, exakt dein Code mit 4.30
Zuletzt geändert von STARGÅTE am 02.05.2009 18:42, insgesamt 2-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Wenn du das Example von Oben ausführst sollte alles gehen. Es wird mindestens PB 4.3 benötigt.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Bei mir hat's leider auch nicht funktioniert.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Komisch....

Ich verwende PB 4.3 x86. Sonst jemand bei dem es nicht geht?
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hochinteressant.
bei mir läufts anstandslos.


4.30 x86 auf XPpro, keinerlei Userlibs.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Beitrag von NicknameFJ »

Bei mir läuft es auch einwandfrei

(Win XP Home SP3 - PB 4.30)

Grüße

NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

STARGÅTE hat geschrieben: Ich habe es monatelang selber ersucht ein Macro in einem Macro zu machen, und bin gescheitert ... du auch ?
Also bei mir kann ich so Macros mit Macros machen, das funktioniert:

Code: Alles auswählen

Macro _EndOfMacro1()
  EndM
EndMacro

Macro _EndOfMacro2()
  acro
EndMacro

Macro EndOfMacro()
:_EndOfMacro1()_EndOfMacro2()
EndMacro

Macro BuildMacro(_Macro, _MacroLine)
  Macro _Macro
    _MacroLine
  EndOfMacro()
EndMacro

BuildMacro(Add(x,y),x + y)
BuildMacro(Sub(x,y),x - y)

Debug Add(3,2)
Debug Sub(3,2)
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

jo ich eben nicht... hatte ja auch die idee mit den zusammen bauen von EndM-acro

Aber ich habe imemr wieder ein EndMacro fehlt bekommen, weil ja halt auch eins fehlt

auch so gehts nicht:

Code: Alles auswählen

Macro _EndOfMacro1 
  EndM 
EndMacro 

Macro _EndOfMacro2 
  acro 
EndMacro 

Macro EndOfMacro
_EndOfMacro1#_EndOfMacro2 
EndMacro 

Macro BuildMacro(_Macro, _MacroLine) 
  Macro _Macro 
    _MacroLine 
  EndOfMacro 
EndMacro 

BuildMacro(Add(x,y),x + y) 
BuildMacro(Sub(x,y),x - y) 

Debug Add(3,2) 
Debug Sub(3,2)
selbst wenn cih die Leerzeichen oben entferne gehs nicht.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ahh jetzt gehts es, aber nur weil wirklich alle Leerzeichen weg sind!
und der : wieder gesetz ist:

Code: Alles auswählen

Macro _EndOfMacro1 
EndM
EndMacro 

Macro _EndOfMacro2 
acro
EndMacro 

Macro EndOfMacro
:_EndOfMacro1#_EndOfMacro2 
EndMacro 

Macro BuildMacro(_Macro, _MacroLine) 
  Macro _Macro 
    _MacroLine
  EndOfMacro 
EndMacro 

BuildMacro(Add(x,y),x + y) 
BuildMacro(Sub(x,y),x - y) 

Debug Add(3,2) 
Debug Sub(3,2)
okee, dann wird ab jetzt einiges Einfacher .... *Includes umschreib*
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten