Seite 1 von 2
Überprüfen wie oft ein String in 1 Sekunde verändert wird?
Verfasst: 17.07.2007 15:02
von PureBasic4.0
Hi, Leute
ich bin fast am Verzweifeln. Ich verändee in einem thread den String Current$, den ich auch geglobalt habe. Ein einem anderen thread soll überprüft werden, wie oft sich dieser String Current$ in einer Sekunde verändert, um dann auf dem Bildschirm diese Zahl + Veränderungen/sek. auszugeben. Leider bekomme ich bei all meinen Versuchen einen IMA. Woran kann das liegen? Der Thread, der die Veränderungen messen soll, wird nach dem Thread gestartet, der den String verändert.
Verfasst: 17.07.2007 15:04
von Kaeru Gaman
strings sind nur bedingt threadsave.
einen string durch einen thread zu verändern und gleichzeitig von nem anderen thread drauf zuzugreifen ist eine echt beschissene idee, das ist einer der sichersten wege, einen IMA zu produzieren.
> Woran kann das liegen?
dein system ist in ordnung.
Verfasst: 17.07.2007 15:06
von PureBasic4.0
naja... aber was kann ich machen, um trotzdem die geschwindigkeit herauszufinden? Ich möchte es nach möglichkeit nicht in dieselbe Procedure schreiben.
Verfasst: 17.07.2007 15:09
von Kaeru Gaman
erklär mal, worum es dir eigentlich geht.
der sicherste weg wäre, in der veränderungs-procedure selber einen counter hochzusetzen.
selbst wenn es dir gelingt, auf einen stringspeicher sicher zuzugreifen,
z.b. indem du AllocateMemory benutzt statt eines Strings,
ist es immer noch extrem wahrscheinlich, dass die etliche veränderungen durch die lappen gehen.
das hat doch bestimmt irgendwas mit deinem bruteforcer zu tun.
was zum geier hast du eigentlich vor?
Verfasst: 17.07.2007 15:16
von PureBasic4.0
Kaeru Gaman hat geschrieben:das hat doch bestimmt irgendwas mit deinem bruteforcer zu tun.
Nein!

Wäre aber eine gute Idee!
Kaeru Gaman hat geschrieben:was zum geier hast du eigentlich vor?
Mein Allgemeinwissen aufbessern!
@Topic: Das heißt im Klartext, es geht nicht, in einem anderen thread die Veränderungen hochzuzählen, oder hab ich da was falsch verstanden?

Verfasst: 17.07.2007 15:28
von Kaeru Gaman
> Das heißt im Klartext, es geht nicht, in einem anderen thread die Veränderungen hochzuzählen
jedenfalls nicht mal eben schnell.
- die veränderungen müßten ziemlich langsam erfolgen,
damit dein überwachender prozess jede veränderung registrieren kann.
- PB spezfisch solltest du eine andere speicherform wählen, als einen normalen string.
- such mal im forum nach 'Mutex' wenn du den speicherbereich schützt,
dass wirklich immer nur ein prozess drauf zugreift, dann klappts vielleicht.
falls es dir nur darum geht, veränderungen durch einen anderen prozess zu überwachen,
beobachte halt ein sich veränderndes Long anstatt eines strings, das ist einfacher.
Verfasst: 17.07.2007 15:33
von PureBasic4.0
Danke, Kaeru

Verfasst: 17.07.2007 16:11
von edel
Nen Mutex macht keinen Sinn, da ein Thread ja warten muss
bis der andere fertig ist. Dann kannst du auch gleich alles in
einem Thread schreiben.
Verfasst: 17.07.2007 16:16
von Tsuki-Namida
um die änderung deines strings zu zählen und auszu geben kannst es doch so machen (es ist sicherer

)
Code: Alles auswählen
Procedure StringÄnderung()
For a = 1 To 1000
String$ = Str(a)
x + 1
SetGadgetText(#Text_1,"Der String$ beinhält " + String$) ;Zeigt die aktuelle Ziffer in der Variaben "a" an.
SetgadgetText(#Text_2,"Der String wurde schon "+ x + " mal geändert.") ;hier in "x" müsste die selbe Ziffer rauskommen... ist halt ein beispiel
Next
EndProcedure
Verfasst: 17.07.2007 16:16
von Kaeru Gaman
edel hat geschrieben:Nen Mutex macht keinen Sinn, da ein Thread ja warten muss
bis der andere fertig ist. Dann kannst du auch gleich alles in
einem Thread schreiben.
hm... ok.. dann nich.. war nur so ne idee...
ich dachte halt, wenn der verändernde thread 1x pro sekunde zugreift,
und der testende thread 10x pro sekunde prüft, dann ist genügend zeit,
die zugrifsrechte zu mutexen...
@Kain
wurde bereits erwähnt...
Kaeru Gaman hat geschrieben:der sicherste weg wäre, in der veränderungs-procedure selber einen counter hochzusetzen.