Thread View: es.comp.os.linux.programacion
11 messages
11 total messages
Started by Francisco Gayá
Mon, 15 Jan 2007 19:03
Pausar un programa, C++, QT Designer, KDE
Author: Francisco Gayá
Date: Mon, 15 Jan 2007 19:03
Date: Mon, 15 Jan 2007 19:03
15 lines
1729 bytes
1729 bytes
Saludos a todos: Antes que nada, diré que tengo la programación aparcada desde los tiempos del DOS, y los entornos gráficos me caen un poco gordos, pero ya me iré acostumbrando. Ya estoy perdiendo la paciencia intentando encontrar una función que me permita hacer una pausa de unos pocos segundos, pero no encuentro nada tan simple. Hasta he probado de crear bucles largos vacíos, como se hacía antiguamente, pero se ve que el compilador los considera inútiles y los ignora ¿...? Agradezco cualquier solución. Saludos.
Re: Pausar un programa, C++, QT Designer, KDE
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Mon, 15 Jan 2007 19:09
Date: Mon, 15 Jan 2007 19:09
12 lines
1572 bytes
1572 bytes
Hola "Francisco Gayá" <gaya1@wanadoo.es> el 15 Jan 2007 11:03:07 -0800 escribiste: > Ya estoy perdiendo la paciencia intentando encontrar una función que > me permita hacer una pausa de unos pocos segundos, pero no encuentro > nada tan simple. tienes sleep(1) y sleep(3) -- Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Re: Pausar un programa, C++, QT Designer, KDE
Author: Alberto Giménez
Date: Mon, 15 Jan 2007 19:33
Date: Mon, 15 Jan 2007 19:33
30 lines
2345 bytes
2345 bytes
Francisco Gay� wrote: > Saludos a todos: > > Antes que nada, dir� que tengo la programaci�n aparcada desde los > tiempos del DOS, y los entornos gr�ficos me caen un poco gordos, pero > ya me ir� acostumbrando. > > Ya estoy perdiendo la paciencia intentando encontrar una funci�n que > me permita hacer una pausa de unos pocos segundos, pero no encuentro > nada tan simple. Has probado sleep(2)? no s� si QT trae funciones de temporizaci�n, pero en cualquier POSIX deber�a existir sleep(2) y alguna que permite afinar m�s. > Hasta he probado de crear bucles largos vac�os, como se hac�a > antiguamente, pero se ve que el compilador los considera in�tiles y > los ignora �...? O tienes un procesador muy r�pido :P Si _realmente_ no se genera c�digo en esos bucles, haz que sean �tiles. Por por ejemplo alguna asignaci�n o algo as� para que el compilador no piense que no est�n ah� para algo. De todos modos, esa es una forma p�sima de hacer esperas (dependiente de la frecuencia del procesador, etc). Saludos -- Luis Alberto Gim�nez JabberID: SimManiac@bulmalug.net GnuPG ID: 0x3BAABDE1
Re: Pausar un programa, C++, QT Designer, KDE
Author: Francisco Gayá
Date: Mon, 15 Jan 2007 20:19
Date: Mon, 15 Jan 2007 20:19
34 lines
2403 bytes
2403 bytes
Gonzalo ha escrito: > Hola "Francisco Gayá" <gaya1@wanadoo.es> > el 15 Jan 2007 11:03:07 -0800 escribiste: > > > Ya estoy perdiendo la paciencia intentando encontrar una función que > > me permita hacer una pausa de unos pocos segundos, pero no encuentro > > nada tan simple. > > tienes sleep(1) y sleep(3) > > -- > Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> > PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704 Mil gracias ! Ya había abandonado las pruebas con sleep. Mi fallo fue una mala lectura de la ayuda de la función. Leyendo rápido, interpreté que le tenía que dar el tiempo en milisegundos, y al darle cifras de 2000 o 3000, interpreté que se me quedaba colgado. La ayuda decía: "System independent sleep. This causes the current thread to sleep for secs seconds." Al no funcionar, deduje que esta función sólo funcionaría en programas con varios hilos... y pasé a buscar otras funciones que me pudieran ser útiles. Funciona perfectamente Saludos.
Re: Pausar un programa, C++, QT Designer, KDE
Author: Francisco Gayá
Date: Mon, 15 Jan 2007 20:47
Date: Mon, 15 Jan 2007 20:47
41 lines
2677 bytes
2677 bytes
Alberto Giménez ha escrito: > Has probado sleep(2)? no sé si QT trae funciones de temporización, pero > en cualquier POSIX debería existir sleep(2) y alguna que permite afinar más. Gracias. Este tema ya ha quedado solucionado con la respuesta de Gonzalo. Fue un fallo torpe de lectura. > > Hasta he probado de crear bucles largos vacíos, como se hacía > > antiguamente, pero se ve que el compilador los considera inútiles y > > los ignora ¿...? > > O tienes un procesador muy rápido :P Si _realmente_ no se genera código > en esos bucles, haz que sean útiles. Por por ejemplo alguna asignación o > algo así para que el compilador no piense que no están ahí para algo. > > De todos modos, esa es una forma pésima de hacer esperas (dependiente de > la frecuencia del procesador, etc). El tema del bucle era *como último recurso*, cuando nada me funcionaba. De todos modos, tampoco hubiera lanzado un bucle a saco. La idea era, al inicio del programa, crear un bucle corto y tomar la hora antes y depués del bucle. Así, puedes hacer el programa con bucles para los tiempos, independientes de la frecuencia del procesador, aunque dependientes de su carga. > > Saludos > -- > Luis Alberto Giménez > JabberID: SimManiac@bulmalug.net > GnuPG ID: 0x3BAABDE1 Saludos.
Re: Pausar un programa, C++, QT Designer, KDE
Author: Alfredo Beaumont
Date: Mon, 15 Jan 2007 21:55
Date: Mon, 15 Jan 2007 21:55
10 lines
1445 bytes
1445 bytes
Francisco Gay� wrote: > Al no funcionar, deduje que esta funci�n s�lo funcionar�a en > programas con varios hilos... y pas� a buscar otras funciones que me > pudieran ser �tiles. Si utilizas Qt, puede que te interese utilizar un timer: http://doc.trolltech.com/4.2/qtimer.html Saludos
Re: Pausar un programa, C++, QT Designer, KDE
Author: rvm
Date: Mon, 15 Jan 2007 22:21
Date: Mon, 15 Jan 2007 22:21
56 lines
2697 bytes
2697 bytes
El Lunes, 15 de Enero de 2007 21:19, Francisco Gay� dej� lo que estaba haciendo
para escribir:
> Mil gracias !
>
> Ya hab�a abandonado las pruebas con sleep. Mi fallo fue una mala
> lectura de la ayuda de la funci�n. Leyendo r�pido, interpret� que le
> ten�a que dar el tiempo en milisegundos, y al darle cifras de 2000 o
> 3000, interpret� que se me quedaba colgado.
>
> La ayuda dec�a:
> "System independent sleep. This causes the current thread to sleep for
> secs seconds."
>
> Al no funcionar, deduje que esta funci�n s�lo funcionar�a en
> programas con varios hilos... y pas� a buscar otras funciones que me
> pudieran ser �tiles.
>
> Funciona perfectamente
Pues ya me contar�s c�mo lo has hecho. �Realmente est�s usando el sleep() de Qt
o el de otra librer�a?
Lo digo porque yo tambi�n me he topado recientemente con este problema.
Si pongo
#include <qthread.h>
...
msleep(200);
me da un fallo al compilar:
error: `msleep' undeclared (first use this function)
Si pongo:
QThread::msleep(200);
me suelta que:
error: `static void QThread::msleep(long unsigned int)' is protected
Total, que buscando por ah� encontr� esto, que s� me funciona:
class Sleeper : public QThread
{
public:
static void sleep(unsigned long secs) {QThread::sleep(secs);}
static void msleep(unsigned long msecs) {QThread::msleep(msecs);}
static void usleep(unsigned long usecs) {QThread::usleep(usecs);}
};
Sleeper::msleep(200);
--
rvm
http://smplayer.sf.net/
Re: Pausar un programa, C++, QT Designer, KDE
Author: Francisco Gayá
Date: Mon, 15 Jan 2007 23:35
Date: Mon, 15 Jan 2007 23:35
73 lines
3200 bytes
3200 bytes
rvm ha escrito:
> Pues ya me contarás cómo lo has hecho. ¿Realmente estás usando el sleep() de Qt
> o el de otra librería?
Estoy usando el sleep() de Qt versión 3.3.5
> Lo digo porque yo también me he topado recientemente con este problema.
>
> Si pongo
>
> #include <qthread.h>
> ...
>
> msleep(200);
>
> me da un fallo al compilar:
> error: `msleep' undeclared (first use this function)
>
> Si pongo:
> QThread::msleep(200);
>
> me suelta que:
> error: `static void QThread::msleep(long unsigned int)' is protected
Acabo de probar el msleep() y me da los mismos errores que a tí, pero
la función sleep(), que se diferencia en la precisión de sólo
segundos, funciona perfectamente, incluso sin el #include <qthread.h>
Por aquí te pego un trozo del programa que estaba haciendo, que no da
problemas:
#include <qdatetime.h>
int espera, intento, tiempo;
double tot;
QTime inici, final, t;
void Form1::tirada()
{
inicio->setEnabled(false);
t = QTime::currentTime();
srand( t.minute()*60+t.second() );
espera = rand()/429496729+3;
sleep(espera);
textLabel1->setPaletteBackgroundColor(0x00FF00);
inici = QTime::currentTime();
boton->setEnabled(true);
}
> Total, que buscando por ahí encontré esto, que sí me funciona:
>
> class Sleeper : public QThread
> {
> public:
> static void sleep(unsigned long secs) {QThread::sleep(secs);}
> static void msleep(unsigned long msecs) {QThread::msleep(msecs);}
> static void usleep(unsigned long usecs) {QThread::usleep(usecs);}
> };
>
> Sleeper::msleep(200);
>
> --
> rvm
> http://smplayer.sf.net/
Tomo nota, ya que posiblemente lo necesite.
Saludos.
Re: Pausar un programa, C++, QT Designer, KDE
Author: rvm
Date: Mon, 15 Jan 2007 23:45
Date: Mon, 15 Jan 2007 23:45
17 lines
1939 bytes
1939 bytes
El Martes, 16 de Enero de 2007 00:35, Francisco Gay� dej� lo que estaba haciendo para escribir: > Acabo de probar el msleep() y me da los mismos errores que a t�, pero > la funci�n sleep(), que se diferencia en la precisi�n de s�lo > segundos, funciona perfectamente, incluso sin el #include <qthread.h> Pues es verdad, el sleep() funciona. Y me quedo perplejo, �de d�nde diablos sale? Ni QWidget ni QApplication ni QMainWindow tienen una funci�n sleep(). Y de QThread tampoco puede venir, ya que entonces tambi�n deber�a funcionar el msleep(). -- rvm http://smplayer.sf.net/
Re: Pausar un programa, C++, QT Designer, KDE
Author: Pedro Maicas
Date: Tue, 16 Jan 2007 10:54
Date: Tue, 16 Jan 2007 10:54
29 lines
2118 bytes
2118 bytes
On Mon, 15 Jan 2007 23:21:10 +0100, rvm <rvm@agujero-negro.escomposlinux.org> wrote: >me da un fallo al compilar: >error: `msleep' undeclared (first use this function) Si msleeep es una funcion miembro de una clase, no la puedes invocar como si fuera una funciona global. >QThread::msleep(200); > >me suelta que: >error: `static void QThread::msleep(long unsigned int)' is protected Pues parece que msleep es una funcion est�tica de esa clase, ahora la has llamado correctamente, pero resulta que no est� declarada como p�blica, sino que es una funcion protegida, entonces solo la puedes llamar desde una funcion miembro de una clase derivada de QThread Hab�a que ver porqu� se ha declarado como pretegida, seguramente ser� porque no tiene sentido (no sirve) llamarla fuera de una clase derivada de la anterior. Saludos :-) -Pedro- http://www.maicas.net/ e-mail en www.maicas.net
Re: Pausar un programa, C++, QT Designer, KDE
Author: Jorge S. de Lis
Date: Wed, 17 Jan 2007 02:03
Date: Wed, 17 Jan 2007 02:03
13 lines
1636 bytes
1636 bytes
rvm en es.comp.os.linux.programacion escribi�: > Y me quedo perplejo, �de d�nde diablos sale? Ni QWidget ni QApplication ni > QMainWindow tienen una funci�n sleep(). �De las librer�as estandar de C? #include <unistd.h> unsigned int sleep(unsigned int seconds); Funciona tambi�n sin hacer el include, as� que seguramente sea eso. Saludos.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads