Apakah aman menggunakan fungsi Sleep () pada Windows di game loop (C ++)? Saya ingin memiliki frame rate yang tetap.
Apakah aman menggunakan fungsi Sleep () pada Windows di game loop (C ++)? Saya ingin memiliki frame rate yang tetap.
Jawaban:
Tidak, tidak. Tidur hanya menjamin waktu minimum untuk tidur, tetapi sebenarnya mungkin tidur untuk jumlah waktu yang sewenang-wenang lebih dari itu. Resolusi penghitung waktu Anda (ditetapkan melalui timeBeginPeriod) juga penting untuknya, dan bahkan jika Anda menggunakan sesuatu yang lain (seperti QueryPerformanceCounter) untuk penghitung waktu Anda, Anda masih memerlukan waktuBeginPeriod untuk mengontrol Tidur.
Jadi dalam ringkasan:
Satu-satunya kasus yang masuk akal untuk menggunakan Sleep adalah jika Anda ingin mengurangi penggunaan CPU untuk perangkat seluler misalnya. Bahkan kemudian Anda akan menggunakan Sleep (1); menggunakannya untuk mengontrol framerates bukanlah cara untuk pergi.
Memaksa vsync aktif mungkin merupakan salah satu cara umum untuk mendapatkan framerate tetap, tetapi meskipun begitu, perangkat keras yang berbeda akan berjalan pada kecepatan refresh yang berbeda dan Anda tidak akan dapat memiliki framerate tetap yang konsisten di mesin yang berbeda (ini tergantung pada jenis perangkat keras apa Anda menargetkan tentu saja).
Pada titik ini perlu menyebutkan artikel ini: Gaffer Pada Game - Perbaiki Timestep Anda! . Itu menjelaskan langkah-langkah yang Anda butuhkan untuk mendapatkan tanda waktu yang konsisten dalam simulasi Anda.
Jawaban singkat: tidak, tidak.
Untuk memiliki frame rate tetap, Anda harus memanggil fungsi callback tertentu yang memaksa frame rate tertentu. Jelas, jika Anda tidak sekarang berapa lama satu iterasi dalam satu loop akan memakan waktu Anda tidak dapat mengatur waktu tidur yang tetap.
GLUT menyediakan glutTimerFunc () , yaitu, jika Anda memprogram di OpenGL, fungsi yang tepat yang Anda butuhkan. Lihatlah contoh ini , atau yang ini .
Sleep
?