Comment redonner temporairement la main au système ?

scelw Messages postés 117 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 17 février 2007 - 23 nov. 2004 à 19:12
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 11 déc. 2004 à 12:53
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 nov. 2004 à 20:47
Si SetWindowText est appele depuis le thread de calcul, ça doit s'afficher.

ciao...
BruNews, MVP VC++
0
cs_Vincent12 Messages postés 3 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 24 novembre 2004
24 nov. 2004 à 11:17
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...
0
scelw Messages postés 117 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 17 février 2007
11 déc. 2004 à 11:36
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 !!!

-
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 déc. 2004 à 11:43
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scelw Messages postés 117 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 17 février 2007
11 déc. 2004 à 12:00
Je suis débutant... Tu pourrais m'expliquer ta réponse? Parce que là, je nage... :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 déc. 2004 à 12:11
WM_PAINT etc... n'ont rien a faire en console, c'est tout l'important de la chose.

ciao...
BruNews, MVP VC++
0
scelw Messages postés 117 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 17 février 2007
11 déc. 2004 à 12:43
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
-
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 déc. 2004 à 12:53
J'en doute fort.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous