আমি বর্তমানে মাইক্রোকন্ট্রোলারদের জন্য একটি আরটিওএস লিখছি। পুরো জিনিসটি C ++ 11 এ লিখিত আছে - যদি কেউ আগ্রহী হয় এবং সংগ্রহস্থলের লিঙ্কটি নীচে রয়েছে।
বর্তমানে আমি একটি শ্রেণি লিখছি যা থ্রেডগুলির মধ্যে অবজেক্টগুলি (বা বিঘ্নিত হ্যান্ডলার এবং থ্রেড বা বিঘ্নিত হ্যান্ডলার এবং অন্যান্য বাধা হ্যান্ডলারের মধ্যে) পাস করার জন্য একটি সহজ ডেটা সারি। সাধারণত আমি অন্যান্য প্রকল্পগুলিতে পাওয়া কিছু সাধারণ এপিআই অনুসরণ করার চেষ্টা করি, তবুও আমি সমকালীন সারির কোনও উদাহরণ পাইনি যা emplace()
ফাংশন রয়েছে এবং সময়সীমা সমর্থন করে।
আমার সাধারণ "সমস্যা" হ'ল আমি এই দুটি ইন্টারফেসের মধ্যে সিদ্ধান্ত নিতে পারি না:
( std::chrono::duration<Rep, Period>
একটি টেম্পলেটেড টাইপ, আমি স্পষ্টতার জন্য টেম্পলেট বয়লারপ্লেট বাদ দিই)
প্রথম সংস্করণ:
template<typename T>
class FifoQueue
{
public:
...
template<typename... Args>
int tryEmplaceFor(std::chrono::duration<Rep, Period>, Args&&... args);
int tryPopFor(T&, std::chrono::duration<Rep, Period>);
int tryPushFor(const T&, std::chrono::duration<Rep, Period>);
int tryPushFor(T&&, std::chrono::duration<Rep, Period>);
...
}
দ্বিতীয় সংস্করণ:
template<typename T>
class FifoQueue
{
public:
...
template<typename... Args>
int tryEmplaceFor(std::chrono::duration<Rep, Period>, Args&&... args);
int tryPopFor(std::chrono::duration<Rep, Period>, T&);
int tryPushFor(std::chrono::duration<Rep, Period>, const T&);
int tryPushFor(std::chrono::duration<Rep, Period>, T&&);
...
}
( ...Until
প্রত্যয় সহ এই ফাংশনগুলির একটি দ্বিতীয় সেট থাকবে - এগুলি সময়কাল পরিবর্তে টাইমপয়েন্ট ব্যবহার করবে)
প্রথম সংস্করণটি শেষ প্যারামিটার হিসাবে টাইমআউট হওয়ার "সাধারণ স্টাইল" অনুসরণ করে (উদাহরণগুলি std::condition_variable
মাইক্রোকন্ট্রোলারগুলির জন্য কোনও আরটিওএসে পসিক্স বার্তা সারি , সাধারণ সারি)। সমস্যাটি হ'ল ট্রাইএম্পলেসফোর () ফাংশনের জন্য শেষ হিসাবে এই সময়সীমা যুক্ত হওয়া সম্ভব নয়, কারণ বৈকল্পিক টেম্পলেটগুলির ক্ষেত্রে "জ্ঞাত" আর্গুমেন্ট অবশ্যই প্রথম (*) হওয়া উচিত। সুতরাং দ্বিতীয় সংস্করণটি "সামঞ্জস্যপূর্ণ" - টাইমআউট সহ সমস্ত ফাংশনের প্রথম আর্গুমেন্ট হিসাবে টাইমআউট হয়। এই বৈকল্পিকটির সম্ভবত কার্যকারিতাটির প্রথম আর্গুমেন্ট হিসাবে টাইমআউট হওয়ার প্রথম উদাহরণ হওয়ার সম্ভবত একটি স্পষ্ট সমস্যা রয়েছে।
কোন ইন্টারফেসটি ওএসকে আরও ভাল পরিবেশন করবে:
- শেষ আর্গুমেন্ট হিসাবে সময়সীমা থাকার মান প্রতিষ্ঠিত (ব্যতীত
tryEmplaceFor()
এবংtryEmplaceUntil()
- এটি প্রথম যুক্তি (*) হতে হবে)? - ধারাবাহিকতা - টাইমআউটটি প্রথম যুক্তি হিসাবে পছন্দ করবেন?
(*) - আমি জানি যে প্রযুক্তিগতভাবে আমার শেষ আর্গুমেন্ট হিসাবে সময়সীমা থাকতে পারে tryEmplaceFor()
এবং tryEmplaceUntil()
তবে আমি এ জাতীয় সরল দৃশ্যের জন্য এই জাতীয় টেমপ্লেট যাদুটি ব্যবহার করা এড়াতে চাই - শেষ যুক্তিটি পেতে কেবল এই সমস্ত পুনরাবৃত্তিমূলক ইনস্ট্যান্টেশনগুলি করা কিছুটা ওভারকিল বলে মনে হয়, বিশেষত যখন আমি ত্রুটিগুলি সংকলকটি দেখায় যখন ব্যবহারকারীরা কিছু ভুল করে ...