Help : redonner la main au système [Résolu]

Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
- - Dernière réponse : scelw
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
- 13 déc. 2004 à 15:14
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!!!!
Afficher la suite 

Votre réponse

20/23 réponses

Meilleure réponse
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
3
Merci
bon, j'ai la solution. il suffit de "flusher" la mémoire, c'est à dire de la forcer à s'écrire. ex :
cout << "texte_à_afficher" << flush;

et voilà! c du à une erreur dans certaines versions de Visual Studio 6 apparemment... (voir mon sujet intitulé "UpdateWindow et SendMessage" sur cppfrance.)

thx

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de scelw
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
Mets un Sleep(1); dans ta boucle. Si ce n'est pas suffisant, augmente le nombre juska ske ca le devienne, mais normalement, pas de pb.

++

+2(p - n)
Commenter la réponse de cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
Ah et j'ai oublié, si tu utilises des threads, fo gérer ca avec les objets de synchronisation, dans l'appel a WaitFor(Single/Multiple)Object(). Details sur MSDN.

Bonne chance

++

+2(p - n)
Commenter la réponse de cs_AlexMAN
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
0
Merci
j'utilise pas de threads mais par contre, pour utiliser la fonction Sleep() fo pas ajouter des includes particuliers??
THX !
Commenter la réponse de scelw
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
#include <windows.h> devrait suffire.

+2(p - n)
Commenter la réponse de cs_AlexMAN
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
salut,

Si tu fais du calcul scientifique intensivement, faut te mettre à UNIX d'urgence !!!
un systeme UNIX te permettra de donner une priorité (basse) à un processus, de façon à ne pas bouffer toutes les ressources.
utiliser Sleep pour "scheduler" ? ça me fait de la peine ... C'est pas une solution.
Commenter la réponse de plus_plus_fab
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
Euh plus_plus_fab, faudrait te renseigner sur les API Windows avant de dire des betises...Un systeme Windows te permet de donner une priorité basse aussi, SetThreadPriority()...
Et cette idée est completement debile, ton thread ne sera pas prioritaire, et pour du calcul INTENSIF, excuse moi mais c pas top..
Personnelement, je trouve le Sleep() bien, et ne vois pas pkoi ca te fait tant de peine...

+2(p - n)
Commenter la réponse de cs_AlexMAN
Messages postés
554
Date d'inscription
samedi 6 septembre 2003
Dernière intervention
6 mars 2010
0
Merci
Bonsoir,

Essaye ca :

void DoEvents()
{
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

Matt...
Commenter la réponse de cs_Matt67
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
je n'ai pas l'intention de me renseigner sur les API w$.
je n'ai pas dit de betises.
utiliser Sleep, c'est débile.

Ce SetThreadPriority(), il peut donner une priorité basse à un processus ?
m'étonnerais !
Sur UNIX, il y a la commande nice qui permet de lancer un processus avec une priorité basse, et renice d'affecter une priorité basse à un processus déja lancé.
C'est l'idéal pour faire des grosses taches de fond ... et pouvoir travailler sans gros ralentissements.
scelw > je te dit ça parce que vraiment, c'est la solution à ton problème. Mais peut-etre n'as tu pas le choix de la plateforme de développement, ou autre, je respecte ...
Commenter la réponse de plus_plus_fab
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
Sous Windows avec CreateProcess, on regle le niveau de priorite dans le membre dwCreationFlags.
ET C'EST CERTAIN.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
241
Date d'inscription
vendredi 23 mai 2003
Dernière intervention
8 octobre 2007
0
Merci
T'essaie de facto de la clef publique?

eRoZion
Commenter la réponse de cs_eRoZion
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
0
Merci
>> Matt67, j'ai essayé cette méthode mais g plusieurs erreurs... faut-il ajouter un include particulier ??

> c'est pas de la clef publique mais c'est des maths crypographiques, effectivement.

... pourriez-vous être plus explicite dans vos explications car je suis néophyte. :) thx!!
Commenter la réponse de scelw
Messages postés
3
Date d'inscription
dimanche 14 novembre 2004
Dernière intervention
24 novembre 2004
0
Merci
Ok comme tu avais fait un multi post j'avais repondu ailleurs
Plus bas la reponse originelle ... Mais le truc de Matt67
doit fonctionner
A+

-------------------------------

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...
Commenter la réponse de cs_Vincent12
Messages postés
3
Date d'inscription
dimanche 14 novembre 2004
Dernière intervention
24 novembre 2004
0
Merci
SUITE :

Oupss à une différence près peut etre :
Matt67 si je me trompe pas tu as récupéré une procédure
winmain standard ... mais il me semble qu'on ne sortira de la
fonction à cause du while que dans le cas du message WM_QUIT.
Le while serait donc a supprimer dans la fonction ????
Commenter la réponse de cs_Vincent12
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
en fait, tu veux donner la main au systeme pour quoi faire ? pour que les résultats intermédiaires puissent s'afficher ? ça n'a rien à voir, regarde plutot du coté de la vidange de tes flux d'entrée sortie (flush).

Si c'est pour moins encombré ton système, Brunews t'as donné la réponse, lance ton processus de calcul à l'aide de ProcessCreate, en indiquant une priorité basse.
Commenter la réponse de plus_plus_fab
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
0
Merci
oui je veux juste donner la main au système pour l'affichage des résultats intermédiaires (cad affichage dans fenêtre ms-dos + création d'un fichier txt contenant des données). la machine sera dédiée à ce travail donc il ne s'agit pas de baisser la priorité du processus (du programme).

merci pour vos aides, je teste tout ça ce WE et je vous tiens au courant. merci pour tout!! :)
Commenter la réponse de scelw
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
0
Merci
Ce qui serait idéal c'est une fonction comme celle de Matt67, pour traiter les messages en attente... Mais je n'arrive pas à faire marcher ce code!!! Comment ça se fait??
Est-ce qu'il faut rajouter des includes ou des composants particuliers pour que le code marche?
(je rappelle que je travaille avec Visual Studio 6...)

J'aimerais tant arriver à faire marcher cette fonction!!!!
Commenter la réponse de scelw
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
0
Merci
Tenez, voici les erreurs que me renvoient le débuggeur quand j'essaye de compiler mon prog : (toutes les erreurs sont dues à la fonction DoEvents() de Matt67. Sans elle mon prog n'affiche pas d'erreur, seulement deux "warning"...)

--------------------Configuration: first gen - Win32 Debug--------------------
Compiling...
first gen source.cpp
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(10) : error C2065: 'MSG' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(10) : error C2146: syntax error : missing ';' before identifier 'msg'
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(10) : error C2065: 'msg' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(11) : error C2065: 'PeekMessage' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(11) : error C2065: 'PM_REMOVE' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(13) : error C2065: 'TranslateMessage' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(14) : error C2065: 'DispatchMessage' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(23) : warning C4551: function call missing argument list
C:\Program Files\Microsoft Visual Studio\Myprojects\first gen\first gen source.cpp(30) : warning C4551: function call missing argument list

Error executing cl.exe.

first gen.exe - 7 error(s), 2 warning(s)
Commenter la réponse de scelw
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
windows.h suffit...

+2(p - n)
Commenter la réponse de cs_AlexMAN
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Dernière intervention
17 février 2007
0
Merci
Saperlipopette, c'est exactement ce qui posait problème!
A présent tout baigne, j'avais simplement ommis d'inclure windows.h...

AlexMAN, je te consacre "Aideur d'or"!
Merci aussi à Matt67 pour son code (qui fonctionne très bien maintenant) et à tous les autres, pour leur contributions diverses!

THANKS
Commenter la réponse de scelw

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.