Überprüfen wie oft ein String in 1 Sekunde verändert wird?
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
Überprüfen wie oft ein String in 1 Sekunde verändert wird?
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.
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.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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?
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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
Nein!Kaeru Gaman hat geschrieben:das hat doch bestimmt irgendwas mit deinem bruteforcer zu tun.

Mein Allgemeinwissen aufbessern!Kaeru Gaman hat geschrieben:was zum geier hast du eigentlich vor?
@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?

PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> 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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
- Tsuki-Namida
- Beiträge: 633
- Registriert: 17.11.2005 13:27
- Kontaktdaten:
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
Zuletzt geändert von Tsuki-Namida am 17.07.2007 16:18, insgesamt 2-mal geändert.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
hm... ok.. dann nich.. war nur so ne idee...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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.