kleiner diskscanner mit waitevent

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

 

X0r

Betreff: kleiner diskscanner mit waitevent

BeitragFr, Jul 14, 2006 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hattet ihr auch Früher das Problem mit euren eigenen Beispiel Disk Scanner?: Die GUI Objekte funktionieren dann nicht mehr. Alles disabled. Was nun?

Hier ein Beispiel: Bei dem die Objekte nicht disabled sind:

Code: [AUSKLAPPEN]

global timer

timer = createtimer(70)
search("C:/")


Function search(apath$)


odirs1=ReadDir(apath$)
Repeat
WaitEvent()






Select EventID()
Case EVENT_TIMERTICK




file$=NextFile(odirs1)

If file$="" Then Return





If FileType(apath$+"/"+file$)=1 Then


print  apath$+"/"+file$

ElseIf FileType(apath$+"/"+file$)=2
If file$<>"." And file$<>".." Then

search(apath$+"/"+file$)



EndIf
EndIf
End Select



Until file$=""







CloseDir(odirs1)
End Function




Einfach ein waitevent() und timertick event in die schleife. schon können die GUI Objekte auch dabei genutzt werden.
P.s: Bitte keine blöden Kommentare wie: Für wen hälst du dich eigentlich? Bitte kein flame.
Das ist nur ein kleiner code. Es ist ncht Wert sich drüber zu streiten.
  • Zuletzt bearbeitet von X0r am Fr, Jul 14, 2006 23:02, insgesamt einmal bearbeitet

FOODy

BeitragFr, Jul 14, 2006 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Nett Smile
Kann ich bestimmt mal gebrauchen *g*


Kleine Korrektur:
nicht:Zitat:
End Funktion

sondern:Zitat:
End Function

;D

BtbN

BeitragFr, Jul 14, 2006 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Er wäre noch kleiner, wenn du nicht so viele leerzeilen reinpacken würdest. Rolling Eyes

Hummelpups

BeitragFr, Jul 14, 2006 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Und vernünftig eingerückt ist es auch nicht, kein wunder das nie was
bei raus kommt Rolling Eyes

Damit auch was nützliches in meinem Post steht:

Die funktion t natürlich überhaupt nicht ohne weiteres zu gerauchen weil
man erst mal die prints rausnehmen muss. Solche bereit gestellten funktionen
sollten aufgeräumt und SuperStrict komform sein. Das schafft die nicht.
Bau sie um.

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

X0r

BeitragFr, Jul 14, 2006 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ok. ist jetzt egal. Ihr seht das Prinzip ja. reicht hin.
Einfach waitevent() in die Schleife und mit EVENT_TIMERTICK arbeiten.
 

E. Urbach

ehemals "Basicprogger"

BeitragSa, Jul 15, 2006 9:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
SuperStrict

'Vars
Global timer:TTimer

'Init
timer = CreateTimer(70)

'Main
search("C:/")

'Functions
Function search:Int(apath$)
   
   Local file:String
   Local odirs1:Int
   
   odirs1 = ReadDir(apath$)
   
   If odirs1=0 Then
      
      Return -1
      
   EndIf
   
   'Loop
   Repeat
      
      WaitEvent()
      
      Select EventID()
         
         Case EVENT_TIMERTICK
            
            file$=NextFile(odirs1)
            
            If file$="" Then Return 1
            
            If FileType(apath$+"/"+file$)=1 Then
               
               DoSomethingWith( apath$+"/"+file$ )
               
            ElseIf FileType(apath$+"/"+file$)=2
               
               If file$<>"." And file$<>".." Then
                  
                  search(apath$+"/"+file$)
                  
               EndIf
               
            EndIf
            
      End Select
      
   Until file$=""
   
   CloseDir(odirs1)
   
   Return 1
   
End Function

'Output function, you have to manipulate it for your code
Function DoSomethingWith( path:String )
   
   Print path
   
End Function


P.S. Schade, dass man in BMax keine Funktionszeiger übergeben kann, das würde das Problem viel eleganter lösen.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

X0r

BeitragSa, Jul 15, 2006 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Sag mal, muss man das machen: timer:TTimer. Eigentlich nicht, oder? Warum schreibt ihr es dann extra?
Macht ihr das, weil das BEispiel dann professioneller aussieht?

Zum Abbruch des Scanner:

vorher: global stops=0

select eventsource()
case chancel
stops=1
end select

Bei der Entscheidung mit dem Dir und in der Schleife mit nexfile():
if stops=1 the return


Sagt jetzt bitte nicht, das klappt nicht. Ich habs ausprobiert und es klappt.

Byteemoz

BeitragSa, Jul 15, 2006 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Im SuperStrict-Modus wird sowas wie
Code: [AUSKLAPPEN]
Global timer = CreateTimer(70)
kaum funktionieren...
Außerdem lässt es den Code nicht nur professioneller aussehen sondern erleichert auch das Debuggen.
-- Byteemoz
MaxIDE Community Edition: Summary | Bugs | Feature Requests | CVS Repository | Thread

BladeRunner

Moderator

BeitragSa, Jul 15, 2006 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
und dadurch das du den TTimer als typ angibst wird nicht auf ne int gecastet. Wesentlich besser das.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

X0r

BeitragSo, Jul 16, 2006 0:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Egal. aber wenn das Programm kompiliert ist und man das fertige Programm startet, läuft alles schnell und wunderbar. Very Happy

BladeRunner

Moderator

BeitragSo, Jul 16, 2006 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht egal, denn wenn du gängige Konventionen nicht lernst und auch einhälst wirst du massiv Probleme kriegen wenn Du mal mit anderen zusammenarbeiten willst.
Strict und superstrict sind extrem hilfreiche Stützen, da sie zu sauberem Coden zwingen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

X0r

BeitragSo, Jul 16, 2006 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll eigentlich dieses T bedeuten(TImage,TGadget,TSound,TTimer,..)?

Rone

BeitragSo, Jul 16, 2006 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
vieleicht Type...

Byteemoz

BeitragSo, Jul 16, 2006 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist auch eine der Konventionen (wie auch das Einrücken von Blöcken oder Großschreiben von Konstanten), die den Code leserlicher machen.
MaxIDE Community Edition: Summary | Bugs | Feature Requests | CVS Repository | Thread

BladeRunner

Moderator

BeitragSo, Jul 16, 2006 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
T steht für type.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Artemis

BeitragSo, Jul 16, 2006 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@Basicprogger,

klar geht das.

Hab deinen Code ein wenig geändert:
Code: [AUSKLAPPEN]
SuperStrict

'Vars
Global timer:TTimer

'Init
timer = CreateTimer(70)

'Main
search("C:/", DoSomethingWith)

'Functions
Function search:Int(apath$, func(str$))
   
   Local file:String
   Local odirs1:Int
   
   odirs1 = ReadDir(apath$)
   
   If odirs1=0 Then
     
      Return -1
     
   EndIf
   
   'Loop
   Repeat
     
      WaitEvent()
     
      Select EventID()
         
         Case EVENT_TIMERTICK
           
            file$=NextFile(odirs1)
           
            If file$="" Then Return 1
           
            If FileType(apath$+"/"+file$)=1 Then
               
               func( apath$+"/"+file$ )
               
            ElseIf FileType(apath$+"/"+file$)=2
               
               If file$<>"." And file$<>".." Then
                 
                  search(apath$+"/"+file$, func)
                 
               EndIf
               
            EndIf
           
      End Select
     
   Until file$=""
   
   CloseDir(odirs1)
   
   Return 1
   
End Function

'Output function, you have to manipulate it for your code
Function DoSomethingWith( path:String )
   
   Print path
   
End Function

rema

BeitragSo, Jul 16, 2006 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner, meinst du nicht, dass eine solche Diskussion nichts mehr mit einem CodeArchiv zu tun hat? Zumal der Code die Kriterien für das CodeArchive nicht erfüllt...

Byteemoz

BeitragMo, Jul 17, 2006 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Codearchiv soll
Zitat:
Quellcode-Schnippsel und kleine Spielereien in BlitzMax
enthalten ... passt doch! Very Happy
-- Byteemoz
MaxIDE Community Edition: Summary | Bugs | Feature Requests | CVS Repository | Thread

BladeRunner

Moderator

BeitragMo, Jul 17, 2006 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich stimme Dir insofern zu als das die Diskussion über Codestyle nicht unbedingt passt.
Da jedoch einige verbesserte Snippets daraus entstanden sind sehe ich das ganze nicht so eng.
Abgesehen davon war der Code eine abgeschlossene, wenn auch nicht strict-konforme Sache.
Da ich deinen Einwand jedoch als berechtigt sehe möchte ich alle anderen bitten für eine eventuelle Weiterführung der Codekonventionsdiskussion im Smalltalk einen Thread zu eröffnen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group