CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C/SDL] Problème avec le temps.

chris_27
chris_27
Niveau 10
22 mars 2011 à 19:35:11

DESCRIPTION
The usleep() function suspends execution of the calling process for (at least) usec microseconds.

caelacanthe
caelacanthe
Niveau 10
22 mars 2011 à 19:45:42

"at least"... il y aurait le même problème de ralentissements, alors :peur:

pourquoi le while() d'attente plantait sous nachos? et d'ailleurs, qu'est-ce nachos? ça a l'air plutôt ancien :(

chris_27
chris_27
Niveau 10
22 mars 2011 à 22:51:29

Parce que faire un while() c'est demander au proco de faire de nop. Et quand tu codes un système d'exploitation et que le changement de contexte n'est pas géré par ailleurs, personne ne t'arrête si tu fais des nop et tu bouffes toutes les ressources pour rien. À l'inverse, quand tu fais un sleep(), tu dis explicitement au système d'aller faire autre chose.

Je ne vois pas trop quel est le problème de ralentissements que tu soulignes, tu aurais un exemple sous la main ?

chris_27
chris_27
Niveau 10
22 mars 2011 à 22:52:26

nop == no operation == instruction assembleur qui ne fait rien (à part boucher les trous).

caelacanthe
caelacanthe
Niveau 10
22 mars 2011 à 22:58:43

"Je ne vois pas trop quel est le problème de ralentissements que tu soulignes, tu aurais un exemple sous la main ?"

:d) un jeu que j'avais fait sous SDL, qui utilisait cette forme de bridage des fps et qui ne tolérait pas qu'un autre jeu soit lancé en même temps :oui:

bon, c'était peut-être autre chose, qui sait... ce jeu était très très mal codé (un .h et un .cpp de 7000 lignes qui contenait du code en C, déja :hap: ) :nah:

caelacanthe
caelacanthe
Niveau 10
22 mars 2011 à 22:59:05

"un jeu que j'avais fait sous SDL, qui utilisait cette forme de bridage des fps et qui ne tolérait pas qu'un autre jeu soit lancé en même temps :oui: "

:d) sur un pentium 4. donc ils se partageaient la même unité de calcul.

Pocolo
Pocolo
Niveau 10
22 mars 2011 à 23:06:13

Faut dire qu'on ne joue pas a deux jeux en même temps en général...

chris_27
chris_27
Niveau 10
22 mars 2011 à 23:07:29

Il faut brider au bon moment aussi. À la louche (car ça fait longtemps que je n'ai pas touché à ces choses là), je dirais entre le calcul de la nouvelle image et le SDL_flip().

Sinon, petit exemple illustrant ce que je disais précédemment :

chris@tarsonis:~/Temp% cat test_sleep_1.c
:d) code de test_sleep_1.c avec un while

  1. include <time.h>

int main()
{
time_t t = time(NULL);
time_t t2;

while ( (t2 = time(NULL)) < t + 10);

return 0;
}

chris@tarsonis:~/Temp% date ; time ./test_sleep_1 ; date
:d) j'affiche la date avant, après, et je mesure la conso

mardi 22 mars 2011, 23:00:51 (UTC+0100)
./test_sleep_1 3,92s user 5,36s system :d) 99% cpu :g) 9,290 total
mardi 22 mars 2011, 23:01:01 (UTC+0100)

chris@tarsonis:~/Temp% cat test_sleep_2.c
:d) maintenant, passons au test_sleep_2 avec un sleep à la place du while

  1. include <unistd.h>

int main()
{
sleep(10);
return 0;
}

chris@tarsonis:~/Temp% date ; time ./test_sleep_2 ; date
:d) idem, j'affiche la date avant, après, et je mesure la conso

mardi 22 mars 2011, 23:01:12 (UTC+0100)
./test_sleep_2 0,00s user 0,00s system :d) 0% cpu :g) 10,001 total
mardi 22 mars 2011, 23:01:22 (UTC+0100)

On remarquera au passage que le sleep est très précis avec un total de « 10,001 » secondes contre « 9,290 » pour mon while cracra. :rire2:

Pocolo
Pocolo
Niveau 10
22 mars 2011 à 23:07:37

" un .cpp de 7000 lignes "

Nofake? :hap:

Comment tu faisais pour coder la-dessus? :hap:

Pocolo
Pocolo
Niveau 10
22 mars 2011 à 23:10:43

" On remarquera au passage que le sleep est très précis avec un total de « 10,001 » secondes contre « 9,290 » pour mon while cracra. :rire2: "

J'avais aussi fait un test avec Fraps, avec SDL_Delay mon programme affichait précisément 60 images par secondes alors qu'avec un while c’était plutôt 62 ou 63. :oui:

godrik
godrik
Niveau 30
23 mars 2011 à 02:57:10

"Faut dire qu'on ne joue pas a deux jeux en même temps en général..."

C'est pas une raison pour bouffer des ressources pour rien. Si on peut construire un timer precis ET qui ne consomme pas trop de ressource, je suis prenneur. Le temps CPU que tu ne brule pas comme un con, c'est plus de batterie sur les plateformes mobiles. Ou plus de puissance pour faire autre chose. Ou encore, plus de robustesse face aux demons systeme qui vont se reveiller a un moment et qui vont vouloir une partie des ressources.

Une application qui prends 100% du CPU pour ne rien faire de facon infini est une application mal ecrite. Que ce soit un jeu ou non.

Pocolo
Pocolo
Niveau 10
23 mars 2011 à 10:51:38

" C'est pas une raison pour bouffer des ressources pour rien. "

J'ai dit le contraire?

Je dis juste que le fait qu'il ne veut pas endormir le programme juste parce que ça rame un peu au moment de lancer un autre jeu a coté n'est pas une raison suffisante selon moi.

chris_27
chris_27
Niveau 10
23 mars 2011 à 11:28:09

Héhé. Il faut croire que ton message n'était pas super clair Pocolo.
J'avais eu la même réaction que godrik avant de relire. :(

De toute façon, je pense que le "lag" constaté était lié au mauvais placement du sleep() (ou équivalent).

tbop2
tbop2
Niveau 10
23 mars 2011 à 13:30:47

Pourquoi en anglais ? Parce qu'un code se doit d'etre normalement portable, il en est de meme pour sa comprehension. En rendant ton compte lisible pour tout le monde, tu assures a ton application son universalite. Le premier avantage etant justement que tu peux poster ton code sur n'importe quel forum dans le monde, au lieu de t'en reduire a ceux francais.

C'est une regle d'or jamais trop apprise.

tbop2
tbop2
Niveau 10
23 mars 2011 à 13:31:08
  • ton code lisible
godrik
godrik
Niveau 30
23 mars 2011 à 14:19:49

pocolo, tu n'as pas dit explicitement le contraire. Et la plupart des gens qui invoque l'argument "il n'y en a qu'un qui tourne a la fois" implique "donc rien a branler de jetter les ressources par les fenetres". Et c'est d'ailleurs une conclusion "naturelle" de l'argument.
Je prefere enfoncer le clou pendant que je le vois :)

caelacanthe
caelacanthe
Niveau 10
23 mars 2011 à 19:00:18
  1. Pocolo Voir le profil de Pocolo
  2. Posté le 22 mars 2011 à 23:07:37 Avertir un administrateur
  3. " un .cpp de 7000 lignes "

Nofake? :hap:

Comment tu faisais pour coder la-dessus? :hap:

:d) t'as un petit ascenceur, sur la droite de la fenêtre de tout bon éditeur de texte :oui:

la roulette aussi, sauf sur emacs :hap:

". Le temps CPU que tu ne brule pas comme un con, c'est plus de batterie sur les plateformes mobiles. Ou plus de puissance pour faire autre chose. Ou encore, plus de robustesse face aux demons systeme qui vont se reveiller a un moment et qui vont vouloir une partie des ressources.
"

:d) admettons... si Chris_27 dit que c'est plus précis, je vais peut-être m'orienter là-dessus, finalement. j'espère juste que le problème de préemption que j'avais avant venait du fait que le jeu était codé n'importe comment :(

chris_27
chris_27
Niveau 10
23 mars 2011 à 19:33:54

C'est ma machine qui dit que c'est plus précis. Moi je disais juste que ça permettait de gagner un cœur de calcul tout au long du temps d'"arrêt" de ton programme. :-p

« la roulette aussi, sauf sur emacs :hap: » :d) takka utiliser vim comme tout le monde.

Pocolo
Pocolo
Niveau 10
23 mars 2011 à 19:34:09

" :d) t'as un petit ascenceur, sur la droite de la fenêtre de tout bon éditeur de texte :oui: "

Mince j'utilisais tout le temps "Find" moi, tu fais bien de me le dire. :(

caelacanthe
caelacanthe
Niveau 10
23 mars 2011 à 19:41:15

"« la roulette aussi, sauf sur emacs :hap: » :d) takka utiliser vim comme tout le monde. "

:d) vim? mais enfin, plus personne n'utilise la console de nos jours, il faut vous ouvrir aux nouvelles technologies Monsieur :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment