Überprüfen wie oft ein String in 1 Sekunde verändert wird?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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?

Beitrag 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.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Kaeru Gaman hat geschrieben:das hat doch bestimmt irgendwas mit deinem bruteforcer zu tun.
Nein! :lol: 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? :o
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Danke, Kaeru :allright:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag 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
Zuletzt geändert von Tsuki-Namida am 17.07.2007 16:18, insgesamt 2-mal geändert.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten