elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25
211  Programación / Programación C/C++ / Re: ¿Como realizar muchas tareas pesadas en un programa monohilo? en: 25 Mayo 2019, 22:56 pm
Sí, eso podía ser también un problema en VB6, aunque para eso hay una función, DoEvents, que hace más o menos lo mismo que el código que puse. La pones en medio de una tarea pesada y se encargará de que se verifiquen y procesen mensajes.

Y sí, con EnableWindow lo puedes hacer.

Yo en realidad esto lo fui aprendiendo más que nada con la documentación de Microsoft.

Hay también aquí algo de información aquí: http://winapi.conclase.net pero es más bien básica. Realmente la documentación oficial es a donde hay que recurrir para profundizar en estos temas.
212  Programación / Programación C/C++ / Re: hacer servidor y cliente en windows en: 25 Mayo 2019, 02:55 am
Sí, ya trae Winsock, aunque, naturalmente, debes configurar tu proyecto para que enlace con ella. ¿Qué errores te marca? Si son del tipo "undefined reference", será que te está faltando eso. Debes enlazar con  ws2_32 ( -lws2_32).
213  Programación / Programación C/C++ / Re: ¿Como realizar muchas tareas pesadas en un programa monohilo? en: 23 Mayo 2019, 02:06 am
Pues como te lo puse. Las funciones reales serían:
Código
  1. /* PeekMessage para no bloquear la ejecucion si no hay mensajes */
  2. if (PeekMessage(...)) {
  3.    TranslateMessage(...);
  4.    DispatchMessage(...);
  5. /* Aqui retornamos justo despues de procesar el mensaje */
  6. }
  7.  
Ahora, cierto que en las aplicaciones de Windows tenemos un bucle principal de eventos, normalmente con GetMessage, pero no sé por qué piensas que estaríamos entrando de nuevo en él. Aquí lo que hacemos es simplemente verificar la cola de mensajes, y si hay alguno, DispatchMessage se encargaría de que se invoque nuestro procedimiento de ventana (no el bucle principal, que me parece que es tu confusión), y lo procese, y luego retornamos a donde te puse, a seguir con la tarea pesada.

En cuanto a lo otro, eso depende del programa. Algo común es que, una vez que se presiona un botón para una acción así, éste se deshabilite para evitar múltiples pulsaciones, y sólo se habilite de nuevo una vez finalizada la tarea. Alternativamente, algunos programas hacen que el mismo botón sirva para iniciar la ejecución de la tarea, y para cancelarla. Si se presiona mientras ya se está ejecutando la tarea, provocaría que sea cancelada.
214  Programación / Programación C/C++ / Re: HTML5 y C++? en: 20 Mayo 2019, 02:41 am
Sí, todas las opciones para interfaces gráficas que hay en C y C++, por una u otra razón, dejan mucho que desear. Yo normalmente uso directamente la API de Windows (lo cual es muy tedioso, pero es flexible, estable y eficiente), y a veces Qt, que, una vez que se aprende no es difícil trabajar con ella, pero la barrera de entrada sí es algo alta. Tiene mucha documentación oficial, y en general, diría que es buena, pero sí le falta alguna guía introductoria en la que se explique a nivel general todo eso que comentas sobre cómo se traduce la interfaz en código y demás. Porque todo eso está documentado, pero de forma muy dispersa, y escrito de una forma que sería difícil de entender para alguien que apenas empieza.

La licencia también es algo que echa para atrás. La opción de pago es, como dices muy cara, y además con términos ridículos. La licencia libre, LGPL, no es tan restrictiva. Tu aplicación te pertenece a ti, y puedes venderla sin distribuir los fuentes, siempre y cuando cumplas con ciertos requisitos. No son muchos ni muy molestos pero sí puede ser un obstáculo.

En fin, suerte con los backends. Ojalá eso esté mejor documentado.
215  Programación / Programación C/C++ / Re: HTML5 y C++? en: 19 Mayo 2019, 23:40 pm
No conozco ningún manual que hable de todas esas posibilidades, ni creo que lo haya, dado que en general se trata de proyectos creados por distintas organizaciones y para propósitos diferentes. Te puedo dar algunos términos de búsqueda que te faciliten encontrar información de cada tema. Por ejemplo, para generar dinámicamente HTML mediante C++, y otros lenguajes, la forma "clásica" es mediante CGI (Common Gateway Interface). CppCMS es otro sistema que veo mencionar mucho. En general, si buscas "C++ web backends" deberían aparecerte varias opciones, y a partir de ahí, probablemente haya manuales para el sistema específico que te interese.

En cuanto a las aplicaciones de escritorio, no es exactamente HTML5 lo que se usa con Qt, aunque es muy similar. En realidad, lo que se puede usar para las interfaces gráficas en Qt, aparte de C++, es QML, que es un sencillo lenguaje declarativo (como HTML) que además admite javascript. También es posible usar CSS. La web de Qt tiene mucha documentación, y hay varios manuales y tutoriales de Qt, y generalmente le dedican al menos algún capítulo a QML. En todo caso, ése es el término a buscar.
216  Programación / Programación C/C++ / Re: ¿Como realizar muchas tareas pesadas en un programa monohilo? en: 19 Mayo 2019, 21:55 pm
La forma de hacerlo era, y es, simplemente asegurarse de forma manual que, en medio de las tareas pesadas, los eventos se están procesando de manera periódica. Digamos que tenemos una función que consiste en un bucle con instrucciones complejas, que se repite un número grande de veces (por ejemplo, aplicar un filtro a cada píxel de una imagen). Haciendo algo como esto:

Código:
for (i = 0; i < NUMERO_MUY_GRANDE; i++) {
    /* Operaciones costosas
     * ...
     */
    if (hay_mensajes())
        procesa_mensajes();
}

Se logra que, en cada repetición, se efectúe una pequeña parte de los cálculos y luego se verifique si hay mensajes de ventana (por ejemplo, el usuario presionó un botón) y, de ser así, procesarlos. De esa manera el tiempo se reparte entre el manejo de la GUI y las tareas complejas del programa.
217  Programación / Programación C/C++ / Re: Cambiar posición de los botones de una ventana en: 19 Mayo 2019, 02:10 am
Sí, a partir de Windows Vista, es parte del sistema. Para programar es recomendable usar Visual C++, ya que aunque el compilador MinGW soporta las APIs de Windows, lo hace de forma limitada y te podría dar algún problema.

Nunca he hecho nada parecido a lo que quieres con DWM (he visto cómo se hace pero nunca lo he intentado), así que no te puedo ayudar mucho más. Con la forma antigua sí tengo experiencia, pero como te decía, tiene problemas con los Windows modernos.

No me gusta nada la manera en que Microsoft implementó esto con DWM. No es nada elegante ni me parece bien diseñado, y es más complejo de lo que debería, pero... nada que no se pueda superar con algo de paciencia  :)
218  Programación / Programación C/C++ / Re: Sobrecarga de operador en: 18 Mayo 2019, 03:39 am
Gracias por las respuestas..

me queda claro todo, lo único si que no comprendí bien el por qué de dos cosas

por qué dices que no debo usar system("cls"); de que otra forma puedo limpiar pantalla?..  (conozco otro método que es insertar 100 lineas vacías pero esto haría que el contenido se muestre abajo)

y lo otro, es el std::endl;  la otra forma que conozco es con la secuencia de escape \n

Saludos!

Aunque no fui yo quien te mencionó esos dos puntos, aquí te comento algunas cosas.

Deberías evitar llamar a system(), ya que lo que sucede cuando la invocas no es simplemente que estés llamando a una función (como pasa con printf, scanf, etc.) sino que creas un proceso nuevo, en el cual ejecutas un programa distinto al tuyo, y todo eso es bastante pesado, y casi nunca se justifica. Es una práctica bastante mala.

Lamentablemente no hay una forma estándar de limpiar la pantalla. Insertar líneas es una solución pobre y, como dices, no te deja el cursor al inicio (a menos que en tu programa lleves todo el tiempo un seguimiento de dónde está el cursor). La forma de hacerlo es específica de cada sistema operativo. En Windows es una manera bastante fea y requiere varias líneas de código, pero es lo que hay. Existen bibliotecas/librerías multiplataforma, como ncurses, pero para algo tan simple, no le veo mucho sentido a usarlas. En casos así, yo siempre recurro a las APIs de cada SO, que además suelen ser más eficientes y dar menos problemas.

En cuanto a std::endl, no hay nada de malo en que la uses, salvo que estás tecleando de más sin necesidad. Es común leer que, dado que endl provoca que además de imprimir una nueva línea, se limpie el buffer (lo que ocasiona que se escriban/muestren inmediatamente los datos) es menos eficiente que '\n' (que sólo imprime una nueva línea, sin limpiar el buffer, por lo que los datos podrían no imprimirse en ese momento) pero a cambio garantiza que los datos se muestren correctamente, cuando deben. Todo eso aplica cuando estamos escribiendo a un archivo, pero cuando estamos usando la salida estándar stdout (la consola/terminal/línea de comandos), como en el caso de cout, no hay ninguna diferencia. En Linux, de forma predeterminada stdout es "line buffered", es decir, el buffer se limpia automáticamente cuando se encuentra un caracter de nueva línea, así que ambos, endl y '\n', tienen el mismo efecto. En Windows stdout ni siquiera usa buffer (por defecto) así que imprimas lo que imprimas, se mostrará tan pronto como sea posible. De nuevo, es irrelevante si usas endl o '\n'.
219  Programación / Programación C/C++ / Re: Cambiar posición de los botones de una ventana en: 17 Mayo 2019, 02:36 am
Poder, se puede casi todo con la API de Windows, incluso crear ventanas con formas irregulares. La cosa es que no hay, que yo sepa, ninguna función que te permita cambiar lo que quieres de manera simple. Hay que escribir una buena cantidad de código, y depende de la versión del SO. Anteriormente era sólo cuestión de, por ejemplo, manejar el mensaje WM_NCPAINT, dibujar y acomodar manualmente la barra de título a tu gusto, y manejar los eventos de los botones. Pero eso sólo funciona hasta Windows XP.

Lo anterior ya era un poco complicado, pero para versiones más modernas de Windows lo es aún más. Ahora es necesario usar la API DWM (Desktop Window Manager). No es que sea demasiado difícil pero vas a necesitar implementar un montón de cosas que normalmente Windows hace por ti. Y se necesita tener ya unos conocimientos muy sólidos de la API de Windows. Puedes buscar en Google la API que te menciono y darte una idea, pero sí implica bastante trabajo.
220  Programación / Programación C/C++ / Re: Ayuda con libreria en android en: 14 Mayo 2019, 01:43 am
Puedes probar con secuencias de escape ANSI. No te aseguro que funcione pero probablemente lo haga, dado que Android se basa en Linux. Por ejemplo, para simular gotoxy(10,5):

Código
  1. printf("\x1b[10;5f");
Sólo sustituyes 10;5 por ncolumna;nfila.
Páginas: 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines