afonso360 Posted March 5, 2013 at 08:19 PM Report #498032 Posted March 5, 2013 at 08:19 PM (edited) Boas, estou a tentar fazer um gerador de passwords, e perciso de ter o tempo em milisegundos para usar na funcao srand para poder ser aleatoria e nao demorar muito tempo, alguem sabe como posso fazer isto? Edited March 5, 2013 at 08:23 PM by afonso360
pmg Posted March 5, 2013 at 08:38 PM Report #498034 Posted March 5, 2013 at 08:38 PM Em C ("suponho" que em C++ seja a mesma coisa) o srand() usa-se para seleccionar a sequencia de numeros pseudo-aleatorios devolvida por chamadas sucessivas a funcao rand(). Nao precisas, nem deves!, chamar a funcao srand() (mudar de sequencia de numeros psuedo-aleatorios) mais do que uma vez de cada vez que corres o teu programa. De qualquer maneira, para obteres uma leitura de tempo com resolucao superior a 1 segundo, precisas de recorrer a funcionalidades especificas do teu Sistema Operativo. Qual Sistema Operativo usas? Qual compilador usas? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
afonso360 Posted March 5, 2013 at 08:43 PM Author Report #498037 Posted March 5, 2013 at 08:43 PM Seu eu meter como seed o tempo em millisegundos nao conta como mudar o srand? Eu gostaria que pudesse ser OS independent mas se nao der W8 e Visual Studio 2012
pmg Posted March 5, 2013 at 09:05 PM Report #498043 Posted March 5, 2013 at 09:05 PM Mete o tempo em segundos srand(time(NULL)); e nunca mais chames a funcao srand() ... depois disto chama so a rand(). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
afonso360 Posted March 5, 2013 at 09:21 PM Author Report #498044 Posted March 5, 2013 at 09:21 PM (edited) sim, mas se eu quiser chamar rand() varias vezes num segundo sai sempre o mesmo resultado e se eu quiser gerar uma pass com 32 simbolos vai demorar pelo menos 32 seg. Mas no entanto se chamar com milisegundos devo de conseguir em menos de um segundo Edited March 5, 2013 at 09:24 PM by afonso360
pmg Posted March 5, 2013 at 09:53 PM Report #498047 Posted March 5, 2013 at 09:53 PM (edited) Nao! So repete se chamares srand() varias vezes no mesmo segundo. Nao chames srand() mais do que uma vez por programa! Chama rand() as vezes que precisares. srand(time(NULL)); // escolhe a sequencia, por exemplo, #1362520507 // a sequencia 1362520507 tem milhoes de numeros pseudo-aleatorios for (i = 0; i < 1000; i++) { printf("%d ", rand()); // imprime 1000 numeros pseudo-aleatorios } Edited March 5, 2013 at 09:55 PM by pmg 1 Report What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
afonso360 Posted March 5, 2013 at 09:58 PM Author Report #498048 Posted March 5, 2013 at 09:58 PM Tens razao quando eu tentei mesmo so usando o srand uma vez ele formou um padrao nao sei porque, obrigado
100GPing100 Posted March 19, 2013 at 02:25 PM Report #499657 Posted March 19, 2013 at 02:25 PM (edited) Quando quero fazer coisas em que precise do tempo uso sempre clock() em ctime: http://www.cplusplus.com/reference/ctime/clock/ Por exemplo, isto é como eu calculo o DeltaTime no meu engine: void Core::mainLoop() { long LastTick = clock(); float DeltaTime = 0; MSG Msg; while (true) { while (PeekMessage(&Msg, 0, 0, 0, PM_REMOVE)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } if (Msg.message == WM_QUIT) { break; } if (GetKeyState(27) & 0x8000) { PostQuitMessage(0); } DeltaTime = (clock() - LastTick) * 0.001f; LastTick = clock(); engine->Tick(DeltaTime); engine->Render(renderer); } } Edited March 20, 2013 at 11:33 PM by Baderous geshi
HappyHippyHippo Posted March 19, 2013 at 02:34 PM Report #499661 Posted March 19, 2013 at 02:34 PM Quando quero fazer coisas em que precise do tempo uso sempre clock() em ctime: http://www.cplusplus.com/reference/ctime/clock/ a fnução clock é usada para "calcular" o tempo de processador usado. a consequência directa disso é que basta ter outra aplicação a correr ao mesmo tempo para a tua aplicação não ter 100% do processados (isto para não falar do SO). o que descrevi levaria imediatamente a que um resultado da chamada da função clock nunca equivale a 10 segundos, mas a um tempo real muito maior. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pikax Posted March 19, 2013 at 02:44 PM Report #499663 Posted March 19, 2013 at 02:44 PM Parece que o teu codigo com o clock e' para windows, seria melhor utilizar High Resolution Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
100GPing100 Posted March 19, 2013 at 03:34 PM Report #499670 Posted March 19, 2013 at 03:34 PM Não sabia que a margem de erro para a função clock() era de 15ms. Já tinha lido sobre as funções que a API do windows fornece, mas como clock() era cross-platform fiquei por ai. Uma vez que a classe Core é system-specific vou mudar então para QueryPerformanceCounter(). Obrigado pela info 😁
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now