Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » threads und umgebungsvariablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
06.08.2003, 16:32 Uhr
0xdeadbeef
Gott
(Operator)


Das hat mit dem WinAPI nichts zu tun. Und ja, bleiben sie. Der Trick an statischen Variablen ist ja gerade, dass sie nur einmal alloziiert werden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
06.08.2003, 18:39 Uhr
kronos
Quotenfisch
(Operator)


ich hab' noch ein thread-problem:
wenn ich eine funktion, die einen zufallsgenerator (z.b. rnd()) beinhaltet mehrmals als thread aufrufe, erhalte ich jedesmal die selben zahlen.
das hier

C++:
int main()
{
int count;

for (count=0;count!=10;count++){
CreateThread(threadfunktion);

return 0;
}

int threadfunktion(void *useless)
{
int count;

for(count=0;count!=10;count++)
printf("%i\n", rnd());

return 0;
}

liefert mir zehnmal die selbe folge von zehn zahlen. welchen grund könnte das haben, bzw. wie kann man dem abhelfen?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 06.08.2003 um 18:40 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
06.08.2003, 18:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


lies mal die faq zu zufallszahlen

du musst deinen zufall erst initialisieren (z.b. mit ner Uhrzeit) damit was anderes rauskommt. SOnst kommt immer das gleiche raus weil die errechnet werden und damit deterministisch sind. Es hängt also nur von startwert ab und die Uhrzeit ist als startwertr mehr oder weniger gut geeignet

Gruss Heiko
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.08.2003 um 18:44 Uhr von Heiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
06.08.2003, 18:57 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
Heiko postete
[i]du musst deinen zufall erst initialisieren (z.b. mit ner Uhrzeit) damit was anderes rauskommt. SOnst kommt immer das gleiche raus

das stimmt nicht ganz, nicht initialisiert heißt so viel wie mit 1 initialisiert (das gilt zumindest für rnd() aus stdlib.h für C). egal womit ich initialisiere, die zahlen wiederholen sich irgendwann. mein problem ist, dass die reihe der zufallszahlen, die rnd() ausspuckt mit jedem thread von vorner beginnt.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
06.08.2003, 19:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du wirst nichts dagegen machen können das sich die zahlen irgendwann mal wiederholen.
Du kannst höchsten am Anfang des Threads immer neu mit der Uhrzeit initialiesieren, dann sollltest du auch ne andere Reihe bekommen

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
06.08.2003, 19:14 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
Heiko postete
du wirst nichts dagegen machen können das sich die zahlen irgendwann mal wiederholen.


klar, aber dass die wiederholung schon nach zehn zahlen beginnt ist ja nicht normal. wenn ich schreibe
for (i=0;i!=100;i++)
printf("%i\n" rnd());
erhalte ich 100 verschiedene zahlen, wenn ich jedes rnd() in einen eigenen thread schreibe, bekomme ich 100 mal die selbe. das ist es was mich stört...


Zitat:
Du kannst höchsten am Anfang des Threads immer neu mit der Uhrzeit initialiesieren, dann sollltest du auch ne andere Reihe bekommen


das geht leider nicht, weil die threads sehr kurz hintereinander gestartet werden. d.h. ich bekomm wieder die selben zahlen...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
06.08.2003, 19:20 Uhr
Pablo
Supertux
(Operator)


Genau, es ist wie Heiko sagte. Der Computer erzeugt mit rnd() eigentlich keine Zufallszahl, sondern gibt immer ein Reihe von Zahlen aus. Welche wird von srand bestimmt. Die Uhrzeit ändert sich Sekunde für Sekunde und es ist sehr unwahrscheinlich, dass ein Programm zwei Mal zur selben Uhrzeit gestartet wird. Dazu braucht man 2 Tagen und sehr viel Glück. Deshalb initalisiert man mit der Uhrzeiht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
06.08.2003, 20:04 Uhr
kronos
Quotenfisch
(Operator)


aber warum beginnt rnd() in jedem thread die reihe der zufallszahlen von vorn??
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
06.08.2003, 20:18 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


keine Ahnung, ist doch aber auch egal wenn du den spass immer neu im thread mit der Uhrzeit initialisierst sollte das auf jeden fall funzen

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
06.08.2003, 21:03 Uhr
Pablo
Supertux
(Operator)


Da hab ich wirklich keine Ahnung. Deshalb wäre es besser, wenn du srand benutzt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: