Gostaria de gravar em uma variável a hora corrente do computador.

1. Gostaria de gravar em uma variável a hora corrente do computador.

vinicius
Vinicius_Souza

(usa Ubuntu)

Enviado em 20/11/2012 - 17:09h

Olá pessoal,
eu consegui pegar a hora corrente dessa forma porém ela não faz a comparação corretamente.

/*
Name:Agendador C
Copyright: Cristiano CeC
Author: Vinicius Durvalino de Souza
Date: 19/11/12 18:40
Description: Serve para executar uma imagem de 30 em 30 minutos no ecrã do computador !!!
*/
# include <stdio.h>
# include <time.h>
# include <windows.h>

char buf[80];
//Essa função pega a hora atual do compuatdor e grava na variável 'buf'.
tempo_corrente()
{
time_t now;
struct tm ts;

now = time(NULL);

ts = *localtime(&now);
strftime(buf, sizeof(buf), "%M" , &ts);
}

execucao()
/*Essa função faz uma comparação onde se a variavel buf=00 ou 30
ela executa a função 'abrir_img' caso contrário,retorna no main.*/
{
/*
**** Como eu não tenho certeza se o while está certo, eu comentei um if que faz o mesmo ****
if (buf=="00" || buf=="30")
abrir_img ();
else
{
Sleep(10);
main ();
}
*/
while (buf!="00" || buf!="30")
main();
while (buf=="00" || buf =="30")
abrir_img();
}
abrir_img ()
/*Essa função abre a imagem*/
{
system("mspaint D:/popup.jpg");
main();
}
main ()
/*A função main primeiro pega a hora corrente para depois comparar as opções.*/
{
tempo_corrente();
execucao();
}

Eu não consegui fazer assim pois o mesmo não fazia as comparações da função execução .



  


2. Re: Gostaria de gravar em uma variável a hora corrente do computador.

???
gokernel

(usa Linux Mint)

Enviado em 21/11/2012 - 06:24h

errado:
if (buf=="00" || buf=="30")

em C para fazer a comparação seria assim:
if ( !strcmp(buf, "texto") )

lembrando que na struct ( ts ) poderia ser usado para verificar os minutos assim ( ts.tm_min ) sem precisar comparar com uma "string".

e como "regra" nunca fazer chamada a função main ... procure um outro modo de codar diferente deste seu método de chamar main .


3. Re: Gostaria de gravar em uma variável a hora corrente do computador.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/11/2012 - 16:52h

Alguns dos problemas apontados, o código tem vários outros pequenos problemas que poderiam ser apontados pelo próprio compilador, desde que se ativassem opç&#7869;os de diagnóstico de código. Entre eles estão a falta de tipo de retorno e/ou de valor retornado pelas funções e uso da função system() sem incluir o cabeçalho que a declara (<stdlib.h>).

Há ainda mais um problema conceitual: teoricamente, ao menos -- embora eu não veja razão alguma para que aconteça na prática --, localtime pode falhar e devolver um ponteiro nulo, de modo que fazer ts=*localtime(&now) poderia provocar um erro fatal. O mais correto, portanto, seria fazer algo como vai abaixo.

struct tm *p_ts;  /* declara como ponteiro. */
p_ts=localtime(&now);
if(p_ts!=NULL) {
/* Faz o que tem de fazer. */
}


Refoço efaticamente o cuidado de chamar main() recursivamente. Você certamente conseguria substituir isso por uma estrutura de repetição dentro da própria main(), como mostrado abaixo.

int terminar=0;

int main(void){
while(!terminar){
funcao1();
funcao2();
}
return 0;
}



4. Re: Gostaria de gravar em uma variável a hora corrente do computador.

vinicius
Vinicius_Souza

(usa Ubuntu)

Enviado em 26/11/2012 - 18:52h

gokernel escreveu:

errado:
if (buf=="00" || buf=="30")

em C para fazer a comparação seria assim:
if ( !strcmp(buf, "texto") )

lembrando que na struct ( ts ) poderia ser usado para verificar os minutos assim ( ts.tm_min ) sem precisar comparar com uma "string".

e como "regra" nunca fazer chamada a função main ... procure um outro modo de codar diferente deste seu método de chamar main .


gokernel, dessa foma ( !strcmp(buf, "00:00") ) me retorna algo se for igual a 00:00 e como eu faço para colocar quando for diferente de "00:00"?



5. Re: Gostaria de gravar em uma variável a hora corrente do computador.

???
gokernel

(usa Linux Mint)

Enviado em 26/11/2012 - 20:38h

se quer fazer uma comparacao nao igual é so retirar a " ! ":
-----------------------------------
if ( strcmp (buf, "texto") )
-----------------------------------

e cuidado para o seu programa não ficar executando varias chamadas no "decorrer de um SEGUNDO ou MINUTO" ... vc vai ter que fazer algo para "desabilitar" depois da primeira chamada (minuto ou segundo) ...



6. Re: Gostaria de gravar em uma variável a hora corrente do computador.

Victocha
victocha

(usa Ubuntu)

Enviado em 26/11/2012 - 21:19h

Pessoal, aproveitando o tópico me tirem uma dúvida quanto aquela struct tm, ela não tem um escopo? Ou ela pertence a <windows.h> ??

Desculpa a "intromissão"


7. Re: Gostaria de gravar em uma variável a hora corrente do computador.

???
gokernel

(usa Linux Mint)

Enviado em 27/11/2012 - 09:19h

olá "vitocha", não precisa se desculpar ... fique a vontade, seja bem-vindo ao "debate" (pois assim ficará mais rico em informações que provavelmente servirá para quem ler este).

a struct tm faz parte da libC e a interface é definido no arquivo ( time.h ) ... portanto essa é multi-plataforma.

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.15.html


8. Re: Gostaria de gravar em uma variável a hora corrente do computador.

vinicius
Vinicius_Souza

(usa Ubuntu)

Enviado em 27/11/2012 - 13:47h

Olá pessoal,
o programa tá assim.

# include <stdio.h>
# include <time.h>
# include <windows.h>
char buf[80];
tempo_corrente()
{
time_t now;
struct tm ts;

now = time(NULL);

ts = *localtime(&now);
strftime(buf, sizeof(buf), "%M:%S" , &ts);
}

execucao()
{
while( !strcmp(buf, "00:00") || !strcmp(buf, "30:00"))
{
system("mspaint D:/popup.jpg");
inicio ();
}
while( strcmp(buf, "00:00") || strcmp(buf, "30:00"))
{
system("cls");
inicio ();
}
}
abrir_img ()
{
system("mspaint D:/popup.jpg");
inicio();
}
inicio()
{
tempo_corrente();
execucao();
}
main ()
{
inicio();
}


no entanto na função execução lá no 2º while, se eu tirar o system("cls"); que limpa a tela, ele trava.
É do programa ou do windows?
E eu não sei se fiz ele da melhor forma mas a intenção é, de 30 em 30 minutos, ele abrir a imagem.
e gokernel, eu não intendi o que você quer dizer com.e cuidado para o seu programa não ficar executando varias chamadas no "decorrer de um SEGUNDO ou MINUTO" ... vc vai ter que fazer algo para "desabilitar" depois da primeira chamada (minuto ou segundo) ...



Desde já agradeço


9. Re: Gostaria de gravar em uma variável a hora corrente do computador.

???
gokernel

(usa Linux Mint)

Enviado em 27/11/2012 - 20:22h

Cara, desculpe a minha "crítica construtiva", mas esse seu método de codar é exatamente o modo de como nao fazer o LOOP PRINCIPAL de um programa ... sério .

"vou abrir uma esseção" para ajudar a vc nao perder tanto tempo ...



// esse programa executa uma chamada a cada 30 MINUTOS, em windows ...

#include <windows.h>
#include <stdio.h>
#include <time.h>

//-----------------------------------------------
// tempo do "clock" ( CLOCKS_PER_SEC ) em windows
//
// 1 segundo = 1000
// 1 minuto = 1000 * 60 ... = 60.000
// ...
// entao, 30 minutos eh o mesmo que: 60.000 * 30
//
//-----------------------------------------------
//
#define TRINTA_MINUTOS 60000 * 30

int quit = 0;

// tempo definido ...
time_t tempo = TRINTA_MINUTOS;

void funcao_tinta_minuto (void)
{
// seu codigo aqui ...
}

int main ()
{
printf ("aguarde ...\n");

while (!quit)
{
time_t t = clock ();

if (t > tempo)
{
tempo += TRINTA_MINUTOS;

// tudo aqui dentro executa a cada 30 MINUTOS ...
// ...
funcao_tinta_minuto ();
}

Sleep (50);
}

return 0;
}



LEMBRANDO: fica por sua conta sair do LOOP PRINCIPAL ...




10. Re: Gostaria de gravar em uma variável a hora corrente do computador.

vinicius
vinicius_souza

(usa Ubuntu)

Enviado em 06/12/2012 - 13:33h

Mas dessa forma ele executa de 30 em 30 minutos? ou eu posso controlar esse 30 minutos.
Ex. Vamos supor que o programa seja executado as 07:15 ele vai executar o meu cód quando for 07:45? ou as 07:30? porque eu preciso é que ele execute quando os minutos forem igual ou a 00 ou a 30.



11. Re: Gostaria de gravar em uma variável a hora corrente do computador.

???
gokernel

(usa Linux Mint)

Enviado em 06/12/2012 - 14:26h

esse código que mostrei executa uma funcao de 30 em 30 minutos ... se o programa iniciar no horario ( 10:25 ) a proxima execucao da funcao será executada as (10:55) ...

vc já tem todas as informacoes que poderia fazer o programa como vc quer ... entao coloca o cerebro para funcionar e boa sorte ...

OBS: e desculpe-me por mandar o código "já mastigado" para vc ... não farei mais isto, vou deixar que vc mesmo resolva este problema ...


12. Re: Gostaria de gravar em uma variável a hora corrente do computador.

vinicius
vinicius_souza

(usa Ubuntu)

Enviado em 06/12/2012 - 15:58h

está OK, vou estudar uma implementação dele no meu cód.
Aproveitando a sua experiência em C, onde eu posso achar apostilas de otimização e vulnerabilidades de códigos escritos em C?
Att:Vinícius



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts