Programa en C ; Apaga el PC

Iniciado por Den udode, Diciembre 29, 2015, 04:36:46 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Diciembre 29, 2015, 04:36:46 AM Ultima modificación: Enero 02, 2016, 10:51:57 PM por Expermicid

Hola chicos aqui les dejo un programilla en c que me ha ayudado mucho en las descargas de juegos y archivos.
ya que siempre cuando descargo cosas tengo que estar al pendiente de apagarla, como en la noche, porque si no queda prendida, y estuve buscando a ver si habia un programa asi pero no lo encontre asi que hice uno, espero que les guste.

---------------------------------------------------------------------------------------------------------------------------------
Código: c

// cronometro que al finalizar apaga a computadora

#include <stdio.h>

int main(){

float horas, minutos, x,y;
double p;
int res;
x = 0;
y = 0;
p = 0;
horas = 0;
minutos = 0;

printf("\n\n Este es un programa para que en determinado tiempo se apague el computador\n Ideal para dejarla descargando un archivo y poderse ir, sabiendo que en cierto tiempo su pc se apagara");
system(" color 0A");
printf(" \n \n\n DISEÑADO POR: Rishar_XL\n\n");
system("pause");
system ("cls");
system("color 0C");
printf("\n\n\n (1) apagar pc ( con el programa, la pc se apaga mas rapido, en windows)");
printf("\n (2) reiniciar la pc");
printf("\n (3) suspender");
printf("\n (4) temporizador para apagar la pc");
printf(" \n\n \n Elige el numero de la opcion que quieras hacer: ");
scanf("%i",&res);
switch(res){

case 1: system (" shutdown /s /f");break; //aqui va el primer codigo  que es reiniciar
case 2: system (" shutdown /r ");break; //aqui va el codigo de reiniciar
case 3: system (" shutdown /l ");break;// aqui va e codigo de suspender
case 4: system("cls");
printf("\n deja en 0 el valor para no marcar nada");
printf (" \n\n Introduce un valor para las horas: ");
scanf("%f",&horas);
system("cls");
printf("\n deja en 0 el valor para no marcar nada");
printf("\n\n Introduce un valor para los minutos:  ");
scanf("%f",&minutos);
printf(" \n EL PRGOGRAMA YA ESTA INICIADO\n");
printf(" ADVERTENCIA:    MANTEN EL PROGRAMA ABIERTO, PRESIONA ENTER\n");
system("pause");
y = minutos * 60;
x = horas * 3600;
//operaciones
p = x + y;
p *= 16363;

while(p > 0){
printf("\n %f",p);
p--;
if(p == 0){
system("shutdown /s /hybrid");
}
}
break;// AQUI ACABA EL CODIGO DEL CRONOMETRO
default: printf(" LA OPCION ELEGIDA NO ES CORRECTA\n");

}
return 0;

}



Hola!
Se ve muy bueno! Quizas una mejora podría ser que detecte cuando finalice o se cierre una ventana antes de apagarla.
Si la descarga dura 2 horas 30 min y pones que se apaque la pc en 3horas, corres el riesgo de que la velocidad de descarga baje y esas 2 horas y media se transformen en 3 horas y media, por lo que se te cortaría la descarga.
Quizas deberías modificar tu programa para que detecte si la descarga terminó y ahi recien apagar la pc.

Es una sugerencia nada mas, me ha gustado mucho tu post!

Saludos!
ANTRAX


Gracias ANTRAX pensandolo bien, seria bueno que en vez de programa, fuera un plugin para el navegador, para que fueran mas de la mano y como lo que tu dices, sea mas preciso y se pueda actualizar la hora dependiendo la velocidad de descarga. pero por ahora nesecito acabar el curso de c XD

Como te dice Antrax, deberías de arreglar eso... Si no de poco sirve.

Que navegador usas?

Mira, cuando tu pones una descarga te suele salir la opción de cerrar ventana al finalizar la descarga.  Bien,  detecta cuando se cerró la ventana con la API Findwindow y entonces mandar la orden de apagar pc.

Espero haberte ayudado.

Saludos

jajaja gracias la neta si me ayudaste,  quisier poder hacer todo eso... pero apenas acabo de inicar a programar en C y vi que tenia un pedo al descargar los juegos ya que dejaba la pc prendida para que se descargara asi que por eso lo hice, windows tiene uno ya incluido pero tienes que convertiro en segundos asi que no. Juan, en que tendria que aprender a programar para crear plugins en el navegador (mozilla)  o hacer lo que tu dices?

A los plugins de Firefox podes hacerlo con Javascript o con C++

Saludos!
ANTRAX


Yo uso el siguiente comando:

Código: dos
shutdown -s -t 1000 


Donde 1000 sería el tiempo.

Y para cancelar la orden de apagado:

Código: dos
shutdown -a



Hola, vi tu post y quería hacer un aporte porque leí que estabas empezando a aprender C y quería comentar un par de puntos a tener en cuenta sobre tu programa. Es la primera vez que me animo a contestar a un hilo y debido a que lo que voy a comentar son errores, me gustaría aclarar que en ningún momento pretendo humillar ni nada por el estilo, simplemente enseñar un poco y hacer que la gente que compone este foro sea día a día un poco mejor.

A pesar de que ya comentaron que el comando shutdown ya dispone de esa opción, voy a suponer que lo queremos implementar en C si o si.

Punto 1:
Primero me gustaría comenzar haciendo una pregunta con referencia a tu código (linea 48):

Código: c
p *= 16363;


¿Por qué multiplicas la varialbe p por 16363 y lo guardas en p? ¿De donde sale este número? ¿Qué significa?
-He podido intuir que esto se debe a que para relacionar la velocidad a la que disminuyes p y que el tiempo que tarda este en llegar a 0 sea similar a los minutos que introdujo el usuario habrás hecho numerosas pruebas y en tu PC posiblemente hayas conseguido que coincida a cronómetro en mano con el tiempo indicado. Sin embargo tengo que decirte que esto no es correcto.

¿Por qué no es correcto? Te estarás preguntando, aquí la respuesta:
Cuando nosotros ejecutamos un programa, este carga el proceso en memoria y comienza a ser ejecutado por el procesador. En los Sistemas Operativos actuales se hace uso de la multiprogramación a nivel incluso de múltiples núcleos, esto quiere decir que como estamos ante un proceso secuencial, el sistema operativo asignará tu proceso a un núcleo y luego este competirá por el uso de la CPU de ese núcleo con otros procesos que también se encuentren ahí asignados.
¿Que vengo a decir con esto? Que dependiendo de la cantidad de competencia que tenga tu proceso para luchar por el uso de la CPU asignada tu contador disminuirá a mayor o menor velocidad.
Otro factor que afectaría a tu programa es que el nucleo asignado sea "mas rapido o mas lento" que el tuyo.
Esto significaría que se produciría un adelanto o un retrasos a la hora del momento en que se eligió para apagar el PC.

Punto 2:
Otro punto que me gustaría resaltar es que no es recomendable hacer una espera ocupada para llevar a cabo un cierto evento, me refiero a tu codigo (lineas 50-56):

Código: c
while(p > 0){
                printf("\n %f",p);
                p--;
                if(p == 0){
                        system("shutdown /s /hybrid");
                }
}


Este bucle lo único que hace es imprimir por pantalla el valor de p, decrementar su valor, comprobar si es 0 y de ser así ejecuta el comando indicado. El estar todo el rato comprobando esto consumiendo CPU de forma innecesaria se le llama espera ocupada. Esto no es recomendable. Se que quizás sea un poco pronto pero esto lo aprenderás una vez sepas sobre programación secuencial (que es el caso actual) y comiences a aprender sobre programación concurrente.
Para evitar la ejecución de la espera puedes hacer uso de la funcion

sleep(int param);

Ten cuidado pues dependiendo de tu SO, la función esperará los milisegundos del numero que le pases (Caso windows) o lo segundos del numero que le pases (Caso linux).
Si en windows queremos que se haga una espera de 1 segundo, escribimos:

Código: c
sleep(1000)


Podrias comenzar haciendo esas modificaciones si gustas y luego proponerte hacer lo que ya te propusieron anteriormente, que es la detección de la finalización de la descarga.

Si en algun momento he resultado ofensivo o demasiado machacador, les agradecería que me lo hicieran saber pues no es la imagen que quiero transmitir.
Un saludo y gracias por su tiempo :)

PD: cualquier duda, puedes preguntarla en este mismo hilo y lo vamos viendo. Ánimo!!
PD2: Lo siento por el tocho de texto XD