Comment redonner temporairement la main au système ?

Signaler
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
mon programme est destiné au calcul scientifique. il calcule donc à tour de bras sans relâche, les opérations pouvant durer des heures voire des jours puisqu'il s'agit de très grands nombres (gérés avec une classe spéciale mais peu importe). mon problème est que le programme utilise toutes les ressources du système pour calculer et, par exemple, ne permet pas aux résultats intermédiaires de s'afficher. j'aimerais trouver une fonction pour redonner temporairement la main au système (genre DoEvents en VB) sachant que j'utilise Visual Studio 6...

merci pour votre aide!!!!

8 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Si SetWindowText est appele depuis le thread de calcul, ça doit s'afficher.

ciao...
BruNews, MVP VC++
Messages postés
3
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
24 novembre 2004

Si ton appli est multi-thread, ca devrait fonctionner sans
problème (voir peut etre a ajouter un sleep(..) histoire de
redonner un peu de temps au système)..

Si ce n'est pas le cas, la gestion de la boucle des message n'est
jamais appelée (donc pas de gestion du WM_PAINT -> pas
de mise à jour de la fenêtre).. puisque tu ne rends pas la main
a ton process...

Dans ce cas je crois qu'il faut appeler UpdateWindow(hwnd),
ou alors faire un SendMessage(hwnd, WM_PAINT) qui à la
différence du PostMessage ne rend la main qu'une fois la
fonction executée...

Mes souvenirs dans ce domaine sont un peu vieux ... si qqun
pouvais confirmer...
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007

Mon appli n'est pas multithread justement. Mais je ne veux faire de "multithreading" car mon prog perdrait en vitesse...

Vincent12, ta piste m'intéresse : comment mettre à jour une fenêtre (ms-dos) ? comment utilise-t-on UpdateWindow(hwnd) et SendMessage(hwnd, WM_PAINT) ?
qqu'un pourrait-il me coder un ptit exemple?

Thanks !!!

-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
SendMessage(hwnd, WM_PAINT) NON, on appelle InvalidateRect() et c'est le systeme qui fera le message WM_PAINT avec un hdc correct.

En tout cas, ceci n'a rien a voir avec de la console.

ciao...
BruNews, MVP VC++
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007

Je suis débutant... Tu pourrais m'expliquer ta réponse? Parce que là, je nage... :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
WM_PAINT etc... n'ont rien a faire en console, c'est tout l'important de la chose.

ciao...
BruNews, MVP VC++
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007

tu veux dire que la fonction SendMessage(hwnd, WM_PAINT) n'est pas faite pour les consoles ms-dos?

Dans ce cas-là, fo que j'utilise quoi comme fonction similaire pour raffraichir ma fenêtre??

et UpdateWindow(), ça marche avec les consoles ms-dos?

thx
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
J'en doute fort.

ciao...
BruNews, MVP VC++