গেম লুপে (উইন্ডোতে) স্লিপ () ব্যবহার করা কি নিরাপদ?


27

গেম লুপে (সি ++) উইন্ডোজটিতে স্লিপ () ফাংশনটি ব্যবহার করা কি নিরাপদ? আমি স্থির ফ্রেম রেট রাখতে চাই।


আপনাকে "নিরাপদ" বলতে কী বোঝাতে হবে তা পরিষ্কার করা দরকার। অবশ্যই এটি নিরাপদ এবং মেমোরিটিকে দূষিত করতে বা প্লেয়ার পিসি উড়িয়ে দিচ্ছে না।
ক্রোমস্টার বলেছেন মনিকা

উত্তর:


32

না এইটা না. ঘুম কেবলমাত্র ঘুমানোর জন্য ন্যূনতম সময়ের গ্যারান্টি দেয় তবে এটি যে কোনও সময় নির্বিচারে পরিমাণে ঘুমাতে পারে। আপনার টাইমার রেজোলিউশন (টাইমবেগিনপিরিয়ডের মাধ্যমে সেট করা) এটির জন্যও গুরুত্বপূর্ণ এবং আপনি যদি আপনার টাইমারের জন্য অন্য কিছু (যেমন কোয়েরি পারফরম্যান্স কাউন্টার) ব্যবহার করেন তবে আপনার স্লিপ নিয়ন্ত্রণের জন্য এখনও টাইমবেজিণপিডিয়ো প্রয়োজন need

সুতরাং সংক্ষেপে:

  • ঘুমানোর সময় কেবলমাত্র একটি গ্যারান্টিযুক্ত ন্যূনতম এবং আসল ঘুমের সময় আরও বেশি হতে পারে।
  • টাইমবেগেনপিরিয়ডের মাধ্যমে মান সেট (বা সেট নয়) সংবেদনশীল।

ঘুম ব্যবহারের একমাত্র যুক্তিসঙ্গত ক্ষেত্রে যদি আপনি যেমন মোবাইল ডিভাইসগুলির জন্য সিপিইউ ব্যবহার হ্রাস করতে চান। তারপরেও আপনি স্লিপ (1) ব্যবহার করবেন; ফ্রেমরেটগুলি নিয়ন্ত্রণ করতে এটি ব্যবহার করা উপায় নয়।

কোনও স্থির ফ্রেমরেট পাওয়ার জন্য ভিএনসিএনকে বাধ্য করা সম্ভবত একটি সাধারণ উপায়, তবে তারপরেও বিভিন্ন হার্ডওয়্যার বিভিন্ন রিফ্রেশ রেটে চলবে এবং আপনি বিভিন্ন মেশিনে একটি ধারাবাহিক স্থির ফ্রেমরেট রাখতে সক্ষম হবেন না (এটি কোন ধরণের হার্ডওয়্যারের উপর নির্ভর করে আপনি অবশ্যই লক্ষ্য করছেন)।

এই সময়ে এই নিবন্ধটি উল্লেখ করা প্রয়োজন: গেমস অন গেমস - আপনার টাইমস্টেপ ঠিক করুন! । এটি আপনার সিমুলেশনে সামঞ্জস্যপূর্ণ টাইমস্টেপ পাওয়ার জন্য প্রয়োজনীয় পদক্ষেপগুলি বর্ণনা করে।


লিঙ্কটির জন্য প্রচুর ধন্যবাদ। এখন অবধি, আমি সাধারণত নিবন্ধে বর্ণিত "পরিবর্তনশীল টাইমস্টেপ" পদ্ধতির ব্যবহার করেছি।
ইভান ভুইকা 16

ঘুম মেশিনগুলিতেও বিপজ্জনক যেগুলিতে ইন্টেল স্পিড-স্টেপ সক্ষম করা আছে।
ওয়াটারউইজার্ড

"তবে এটি যে কোনও সময় নির্বিচারে পরিমাণে ঘুমাতে পারে।" ঠিক আছে, এটি প্রমাণ করতে হবে আমার ধারণা ... এটির কোনও প্রমাণ কখনও দেখেনি তাই আমি অনুমান করি যে এটি একটি 'সংজ্ঞা'। ভাল উত্তর যদিও এবং হ্যাঁ, আপনি স্থির ফ্রেমরেট সেট করতে কোনও ধরণের স্লিপ ব্যবহার করতে পারবেন না (এটি ঠিক যেমন ছিল ঠিক ততটাই সঠিক) তবে এটি করতে আপনার উচ্চতর নির্ভুল টাইমার প্রয়োজন)।
ভালমন্ড

2
এমএসডিএন অনুসারে - "নোট করুন যে প্রস্তুত থ্রেডটি তাত্ক্ষণিকভাবে চলার গ্যারান্টিযুক্ত নয়। ফলস্বরূপ, ঘুমের ব্যবধানটি কেটে যাওয়ার পরে থ্রেডটি কিছুক্ষণ চলতে পারে না"। সত্য, আমি কখনই এটি ঘটতে দেখিনি, তবে একই সাথে এটি যদি সম্ভব হিসাবে নথিভুক্ত করা হয় তবে আমি অবশ্যই এর আগে কখনও ঘটতে দেখি না।
ম্যাক্সিমাস মিনিমাস

1
উল্লেখযোগ্য, আমি মনে করি এটি "... আপনি সিপিইউ ব্যবহার হ্রাস করতে চাইলে ..." এর সাথে সম্পর্কিত হবে: ": ন্যানোবিট.net / ডক্সি / কুইক ৩ / উইন__মিন_সিসি সোর্স এইচটিএমএল <- প্রাসঙ্গিক কোড 01224 থেকে শুরু হবে
user_123abc

16

সংক্ষিপ্ত উত্তর: না, তা নয়।

একটি নির্দিষ্ট ফ্রেম রেট পেতে আপনাকে একটি নির্দিষ্ট কলব্যাক ফাংশন কল করতে হবে যা একটি নির্দিষ্ট ফ্রেম হারকে বাধ্য করে। স্পষ্টতই, আপনি যদি এখন লুপের মধ্যে একক পুনরাবৃত্তি নিতে না পারেন তবে আপনি স্থির ঘুমের সময় নির্ধারণ করতে পারবেন না।

GLUT glutTimerFunc () সরবরাহ করে , যা আপনি যদি ওপেনজিএলে প্রোগ্রামিং করেন তবে আপনার সঠিক ফাংশনটি প্রয়োজন। এই উদাহরণটি দেখুন বা এটি একটি দেখুন।


1
" কমপক্ষে এমসিসি মিলিসেকেন্ডের পরে , ওপেনগ্লিউট কলব্যাক কল করবে" - এটি কীভাবে আলাদা Sleep?
ক্রোমস্টার বলেছেন মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.