একটি রান লুপ একটি বিমূর্ততা যা (অন্যান্য জিনিসের মধ্যে) সিস্টেম ইনপুট উত্সগুলি পরিচালনা করার জন্য একটি ব্যবস্থা সরবরাহ করে (সকেট, পোর্ট, ফাইল, কীবোর্ড, মাউস, টাইমারস ইত্যাদি)।
প্রতিটি এনএসথ্রেডের নিজস্ব রান লুপ থাকে, যা বর্তমানরুনলুপ পদ্ধতিতে অ্যাক্সেস করা যায়।
সাধারণভাবে, আপনাকে সরাসরি রান লুপটি অ্যাক্সেস করতে হবে না, যদিও এমন কিছু (নেটওয়ার্কিং) উপাদান রয়েছে যা আপনাকে I / O প্রসেসিংয়ের জন্য কোন রান লুপ ব্যবহার করবে তা নির্দিষ্ট করতে দেয়।
প্রদত্ত থ্রেডের জন্য একটি রান লুপ তার এক বা একাধিক ইনপুট উত্সগুলিতে কিছু ডেটা বা ইভেন্ট না হওয়া পর্যন্ত অপেক্ষা করবে, তারপরে "প্রস্তুত" প্রতিটি ইনপুট উত্স প্রক্রিয়া করতে উপযুক্ত ইনপুট হ্যান্ডলার (গুলি) ফায়ার করবে।
এটি করার পরে এটি তার লুপটিতে ফিরে আসবে, বিভিন্ন উত্স থেকে ইনপুট প্রক্রিয়াকরণ করবে এবং যদি কোনও কাজ না করে থাকে তবে "ঘুম"।
এটি একটি সুন্দর উচ্চ স্তরের বর্ণনা (অনেকগুলি বিবরণ এড়াতে চেষ্টা করা)।
সম্পাদনা
মন্তব্যটি সম্বোধনের চেষ্টা attempt আমি এটিকে টুকরো টুকরো করলাম।
- এর অর্থ হল যে আমি কেবল থ্রেডের ভিতরে লুপ চালাতে অ্যাক্সেস / চালাতে পারি?
প্রকৃতপক্ষে. এনএসআরুনলুপ থ্রেড নিরাপদ নয়, এবং কেবল থ্রেডের প্রসঙ্গ থেকে অ্যাক্সেস করা উচিত যা লুপটি চলছে।
- লুপ চালাতে কীভাবে ইভেন্ট যুক্ত করবেন তার কোনও সাধারণ উদাহরণ নেই?
আপনি যদি কোনও বন্দর পর্যবেক্ষণ করতে চান, আপনি কেবল রান লুপটিতে সেই পোর্টটি যুক্ত করবেন এবং তারপরে রান লুপ ক্রিয়াকলাপের জন্য সেই পোর্টটি দেখবে।
- (void)addPort:(NSPort *)aPort forMode:(NSString *)mode
আপনি স্পষ্টভাবে একটি টাইমার যোগ করতে পারেন
- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
- এর অর্থ কী এরপরে আবার ফিরে আসবে?
রান লুপটি প্রতিটি পুনরাবৃত্তির (তার মোড অনুযায়ী) সমস্ত প্রস্তুত ইভেন্টগুলি প্রক্রিয়া করবে। রান মোডগুলি আবিষ্কার করার জন্য আপনাকে ডকুমেন্টেশনটি দেখতে হবে কারণ এটি একটি সাধারণ উত্তরের ক্ষেত্রের বাইরে কিছুটা।
- আমি থ্রেড শুরু করি তখন লুপটি নিষ্ক্রিয় হয়?
বেশিরভাগ অ্যাপ্লিকেশনগুলিতে, প্রধান রান লুপটি স্বয়ংক্রিয়ভাবে চলবে। তবে রান লুপটি শুরু করার জন্য এবং আপনার ঘূর্ণিত থ্রেডগুলির জন্য আগত ইভেন্টগুলির প্রতিক্রিয়া জানানোর জন্য আপনি দায়বদ্ধ।
- থ্রেডের বাইরে থ্রেড রান লুপে কিছু ইভেন্ট যুক্ত করা সম্ভব?
আপনি এখানে কী বলতে চাইছেন তা আমি নিশ্চিত নই। আপনি রান লুপে ইভেন্টগুলি যুক্ত করবেন না। আপনি ইনপুট উত্স এবং টাইমার উত্সগুলি যোগ করুন (রান লুপের মালিকানাযুক্ত থ্রেড থেকে)। রান লুপটি তাদের ক্রিয়াকলাপের জন্য লক্ষ্য করে। আপনি অবশ্যই অন্যান্য থ্রেড এবং প্রক্রিয়াগুলি থেকে ডেটা ইনপুট সরবরাহ করতে পারেন তবে রান লুপ দ্বারা ইনপুট প্রক্রিয়া করা হবে যা রান লুপটি চালাচ্ছে এমন থ্রেডের সেই উত্সগুলি পর্যবেক্ষণ করছে।
- এর অর্থ কি কখনও কখনও আমি থ্রেডকে সময়ের জন্য ব্লক করতে রান লুপ ব্যবহার করতে পারি
প্রকৃতপক্ষে. প্রকৃতপক্ষে, একটি রান লুপ ইভেন্ট হ্যান্ডলারটিতে "থাকার" থাকবে যতক্ষণ না ইভেন্ট ইভেন্ট হ্যান্ডলারটি ফিরে না আসে। আপনি কেবল যেকোন অ্যাপে এটি দেখতে পারবেন। ঘুমায় এমন কোনও আইও ক্রিয়া (যেমন, বোতাম টিপুন) এর জন্য একটি হ্যান্ডলার ইনস্টল করুন। এই পদ্ধতিটি শেষ না হওয়া পর্যন্ত আপনি প্রধান রান লুপটি (এবং পুরো ইউআই) ব্লক করবেন।
এটি কোনও রান লুপের ক্ষেত্রে প্রযোজ্য।
আমি আপনাকে রান লুপগুলিতে নিম্নলিখিত ডকুমেন্টেশন পড়ার পরামর্শ দিচ্ছি:
https://developer.apple.com/documentation/foundation/nsrunloop
এবং তারা থ্রেডের মধ্যে কীভাবে ব্যবহৃত হয়:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1