Para estudiar un poco sobre hilos y procesos en C++ he hecho una pequeña aplicación que a la vez que muestra la fecha y hora del sistema en la pantalla te va pidiendo 2 numero y te muestra el resultado de la suma.
El problema es que a traves de un codigo que he encontrado en internet intento emular el gotoxy de c, pero como podreis ver el cursor esta todo el rato parpadeando ya que cada vez que se ejecuta el hilo mueve el cursor a la posició original.
Sabeis si hay alguna forma de suavizar o anular este efecto?.
Gracias.
Código:
#include <iostream>
#include <string>
#include <sstream>
#include <stdlib.h>
using namespace std;
void Calculadora(void);
void *Reloj(void *);
/* Función para convertir cualquier tipo
de datos a string.
*/
template <class T>
inline string ToString(const T& t) {
stringstream ss;
ss << t;
return ss.str();
}
/* Función para emular al gotoxy en la consola de
Linux.
*/
inline string gotoxy(const int& x,const int& y) {
return "\33[" + ToString(x) + ";" + ToString(y) + "H";
}
int main()
{
pthread_t *mihilo=new pthread_t;
if(pthread_create(mihilo,NULL,Reloj,NULL))
{
cout<<"Error";
}
Calculadora();
}
void Calculadora(void)
{
int n1,n2;
n1=0;
while(n1!=-1)
{
system("clear");
cout<<gotoxy(8,4)<<"Introduce el primer numero: ";
cin>>n1;
cout<<gotoxy(8,4)<<"Introduce el segundo numero: ";
cin>>n2;
cout<< gotoxy(8,4)<<"El resultado de la operacion es:"<< n1+n2<<"\n";
cin>>n1;
}
}
void *Reloj(void *arg)
{
time_t rawtime;
bool a;
a=false;
while(a==false)
{
time( &rawtime );
//system("clear"); // Importante para no sobreescribir la pantalla.
// Emular goto(x, y);
cout << gotoxy(2,4) << ctime(&rawtime )<< "\n";
}
}
#include <string>
#include <sstream>
#include <stdlib.h>
using namespace std;
void Calculadora(void);
void *Reloj(void *);
/* Función para convertir cualquier tipo
de datos a string.
*/
template <class T>
inline string ToString(const T& t) {
stringstream ss;
ss << t;
return ss.str();
}
/* Función para emular al gotoxy en la consola de
Linux.
*/
inline string gotoxy(const int& x,const int& y) {
return "\33[" + ToString(x) + ";" + ToString(y) + "H";
}
int main()
{
pthread_t *mihilo=new pthread_t;
if(pthread_create(mihilo,NULL,Reloj,NULL))
{
cout<<"Error";
}
Calculadora();
}
void Calculadora(void)
{
int n1,n2;
n1=0;
while(n1!=-1)
{
system("clear");
cout<<gotoxy(8,4)<<"Introduce el primer numero: ";
cin>>n1;
cout<<gotoxy(8,4)<<"Introduce el segundo numero: ";
cin>>n2;
cout<< gotoxy(8,4)<<"El resultado de la operacion es:"<< n1+n2<<"\n";
cin>>n1;
}
}
void *Reloj(void *arg)
{
time_t rawtime;
bool a;
a=false;
while(a==false)
{
time( &rawtime );
//system("clear"); // Importante para no sobreescribir la pantalla.
// Emular goto(x, y);
cout << gotoxy(2,4) << ctime(&rawtime )<< "\n";
}
}