Anonym Posted August 17, 2006 at 10:14 AM Report #44781 Posted August 17, 2006 at 10:14 AM Boas, então é assim. Eu tenho um prog, em que user deve inserir um valor, mas se ele demorar mais de x segundos o programa avança... Eu tentei com o Sleep(8000) da lib windows.h , mas nao é bem isto, porque assim o programa para completamente. uso dev-c++ e windows xp
Hipnoted Posted August 17, 2006 at 11:14 AM Report #44791 Posted August 17, 2006 at 11:14 AM Para completamente porque puseste para esperar 8000 segundos... Entre os parêntesis tens que pôr o numero de segundos que queres parar. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
neon_prannock Posted August 17, 2006 at 11:25 AM Report #44794 Posted August 17, 2006 at 11:25 AM Não, o argumento do Sleep() é mili-segundos, logo 8000 seria 8 segundos. Mas o comando Sleep para completamento o programa não permitindo a obtensão de nenhum valor. Vais percisar de usar uma biblioteca com timer, para poderes criar um loop que termine passado x tempo do timer. entro do loop não sei bem que função puderás usar, depende do que tu quiseres obter. Se for só uma tecla, usa as funções KeyPressed para verificares se alguma tecla foi pressionada e depois capturares essa tecla. Se quiseres mesmo obter valores maioresterás que usar outra função. De momento não estou a ver qual possa ser. Pode ser que alguém por aqui já tenha feito algo semelhante. http://sergiosantos.info http://ideias3.com http://takeoff.ideias3.com
Hipnoted Posted August 17, 2006 at 12:50 PM Report #44803 Posted August 17, 2006 at 12:50 PM Podes fazer asim: tempo_ inicial = time(NULL); .... tempo_final = time(NULL); diferença_de_tempo = tempo_final - tempo_inicial; E assim sabes a diferença de segundos... "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Anonym Posted August 17, 2006 at 12:54 PM Author Report #44804 Posted August 17, 2006 at 12:54 PM é o que eu quero é assim, eu fiz um prog que faz um output num ficheiro com a data e hora quando o windows inicia, e eu queria fazer com que apenas houvesse output se o pc reinicia-se sozinho. Entao pensei por esta maneira... essa do KeyPressed é se calhar ainda melhor, mas se tiverem sugestões, agradeço...
Hipnoted Posted August 17, 2006 at 12:58 PM Report #44805 Posted August 17, 2006 at 12:58 PM Não, o argumento do Sleep() é mili-segundos, logo 8000 seria 8 segundos. Mas o comando Sleep para completamento o programa não permitindo a obtensão de nenhum valor. Olha que não é bem assim. Eu este ano tive de usar a função sleep() na programação em C de sockets e para esperar 3 segundos usava a instrução sleep(3)... "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Anonym Posted August 17, 2006 at 12:59 PM Author Report #44806 Posted August 17, 2006 at 12:59 PM mas em c++ com a lib windows.h é em Milisegundos 😛
Hipnoted Posted August 17, 2006 at 01:05 PM Report #44807 Posted August 17, 2006 at 01:05 PM mas em c++ com a lib windows.h é em Milisegundos 😛 Acredito... Eu sei pouco de C++ mas sempre ouvi dizer que se podia escrever C em C++... "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
TheDark Posted August 18, 2006 at 06:54 PM Report #45072 Posted August 18, 2006 at 06:54 PM A resposta complicada eu não a sei dar, era usar mais que um thread e isso ainda só arranhei uma vez e não deu em nada. Uma ideia simples mas que pode ficar cara é por exemplo usar um loop que espere uns 100ms, verifique se há alguma tecla premida, caso haja sai do loop e lê o teclado, caso não haja decrementa uma variável, e se a variável chegar a zero continua o programa. Algo assim: for (int counter=80; counter > 0; --counter) { if (teclapressionada()) { //teclapressionada() e le_teclado(); //le_teclado() sao pura ficcao! break; } Sleep(100); //80 ciclos do loop a multiplicar por 100ms... e fazer as contas } Quanto à função Sleep() existente no windows.h (ou num dos seus headers), o seu parâmetro é efectivamente o número de milissegundos a esperar. Se a que usaste recebia o número de segundos, era uma implementação de outra pessoa... P.S. : Está ali também a função SleepEx() para a tal solução complicada com multithreading... Se alguém quiser desenvolver eu fico agradecido 😄 Desaparecido.
Anonym Posted August 18, 2006 at 08:22 PM Author Report #45099 Posted August 18, 2006 at 08:22 PM obrg... mas essa parte já eu tinha pensado + - o que eu cria era mesmo a parte "le_teclado" se alguem soubesse como ajudar.
Anonym Posted August 20, 2006 at 01:16 PM Author Report #45424 Posted August 20, 2006 at 01:16 PM Ninguem sabe mais alguma coisa? no projecto do emulador de teclado braile.. talvez usou-se alguma coisa parecida..
unsignedint Posted August 21, 2006 at 01:17 AM Report #45514 Posted August 21, 2006 at 01:17 AM Não sei se percebi vem o que querias, mas pegando no exemplo do TheDark aqui vai: #include <stdio.h> #include <stdlib.h> #include <conio.h> //kbhit #include <time.h> // sleep(long) void le_teclado(); int main(int argc, char *argv[]) { int counter = 0; fprintf(stdout, "press a key."); for (counter=80; counter > 0; --counter) { fprintf(stdout, "."); if ( kbhit() ) { //teclapressionada() le_teclado(); //le_teclado() sao pura ficcao! break; } sleep(100); //80 ciclos do loop a multiplicar por 100ms... e fazer as contas } system("PAUSE"); return 0; } void le_teclado(){ fprintf(stdout, "\na tecla foi pressionada"); } Experimentei o codigo no Linux, mas só depois é que me lembrei que o Linux não tem o kbhit() so mesmo o Windows, corre no DevC++. Se não for isto que procuras tenta explicar-te melhor, fica bem.
Anonym Posted August 22, 2006 at 04:49 PM Author Report #45952 Posted August 22, 2006 at 04:49 PM Resolvido! Obrg. Agr outra duvida, alguem sabe como imprimir ficheiros? Imprimir um ficheiro já existente?
unsignedint Posted August 22, 2006 at 08:13 PM Report #46016 Posted August 22, 2006 at 08:13 PM Imprimir para a LPT1 (impressora) ou para o (stdout) ecran?
Anonym Posted August 22, 2006 at 08:24 PM Author Report #46022 Posted August 22, 2006 at 08:24 PM imprimir por impressora...
unsignedint Posted August 22, 2006 at 08:50 PM Report #46029 Posted August 22, 2006 at 08:50 PM O codigo que se segue está em C++. #include <iostream> #include <fstream> #include <string> #include <stdio> // definição using namespace std; int main (void) { string line; ifstream infile ("demo.txt"); ofstream printer ( stdprn ); //stdprn é o handle para a impressora se // nao der experimenta colocar "lpt1" com as aspas // é q p stdprn não está disponivel em alguns compiladores para Win32 so para Linux // experimentei no DevC++ e no Borland C++ 5 ao q parece funca no Turbo C if (infile.is_open()) { while ( !infile.eof() ) { getline (infile,line); // ler uma linha do texto printer << line << endl; // enviar a linha para a impressora } infile.close(); // fechar o texto printer.flush(); } else cout << "Unable to open file"; system("pause"); return 0; } Nota: Nos sistemas Win32 o handle stdprn (standard printer) não existe em alguns compiladores (assim como o stdaux), porque não sei, pelos vistos em alguns compiladores "lpt1" parece funcionar (vi o codigo na net), mas não consegui testar 😄 (sorry). (Lembro-me que o consegui fazer, mas já lá vão 6 anos) PS: Caso essa dica não te ajude experimenta ver aqui: http://groups.google.com/group/microsoft.public.win32.programmer.gdi/browse_frm/thread/4635853df580dfa1/d2c52651856f1fda?lnk=st&rnum=5&hl=en#d2c52651856f1fda um tipo afirma que consegui faze-lo usando API nativa para Win32, além do mais ele tem lá o codigo fonte. Boa sorte.
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