একটি বার্তা লুপটি কোডের একটি ছোট অংশ যা কোনও স্থানীয় উইন্ডোজ প্রোগ্রামে বিদ্যমান। মোটামুটি এটি দেখতে দেখতে:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
উইটমেসেজ () উইন 32 এপিআই উইন্ডোজ থেকে একটি বার্তা পুনরুদ্ধার করে। আপনার প্রোগ্রামটি সাধারণত এটির 99.9% সময় ব্যয় করে উইন্ডোজটিকে এটি আকর্ষণীয় কিছু বলার জন্য অপেক্ষা করে। ট্রান্সলেশনমেসেজ () একটি সহায়ক ফাংশন যা কীবোর্ড বার্তাগুলির অনুবাদ করে। ডিসপ্যাচমেসেজ () নিশ্চিত করে যে উইন্ডো পদ্ধতিটি বার্তার সাথে ডেকে আনা হয়েছে।
প্রতিটি জিইউআই সক্ষম। নেট প্রোগ্রামের একটি বার্তা লুপ থাকে, এটি অ্যাপ্লিকেশন দ্বারা শুরু হয় un রুন ()।
অফিসে কোনও বার্তা লুপের প্রাসঙ্গিকতা COM এর সাথে সম্পর্কিত। অফিস প্রোগ্রামগুলি COM- সক্ষম প্রোগ্রামগুলি, মাইক্রোসফ্ট.অফিস.আইনটারপ ক্লাসগুলি এভাবে কাজ করে। সিওএম কোনও সিওএম কক্লাসের পক্ষে থ্রেডিংয়ের যত্ন নেয়, এটি নিশ্চিত করে যে কোনও সিওএম ইন্টারফেসে করা কলগুলি সর্বদা সঠিক থ্রেড থেকে করা হয়। বেশিরভাগ সিওএম ক্লাসের রেজিস্ট্রিতে একটি রেজিস্ট্রি কী থাকে যা তাদের থ্রেডিংমডেল ঘোষণা করে, এখন পর্যন্ত সবচেয়ে সাধারণ (অফিস সহ) "অ্যাপার্টমেন্ট" ব্যবহার করে। যার অর্থ একটি ইন্টারফেস পদ্ধতিতে কল করার একমাত্র নিরাপদ উপায় হল একই থ্রেড থেকে কল করা যা শ্রেণি অবজেক্ট তৈরি করেছিল। বা এটি অন্য কোনও উপায়ে বলতে গেলে: এখন পর্যন্ত বেশিরভাগ COM ক্লাস থ্রেড-নিরাপদ নয়।
প্রতিটি সিওএম সক্ষম থ্রেড একটি সিওএম অ্যাপার্টমেন্টের অন্তর্গত। দুটি ধরণের রয়েছে, একক থ্রেডেড অ্যাপার্টমেন্ট (এসটিএ) এবং একটি মাল্টি থ্রেড অ্যাপার্টমেন্ট (এমটিএ)। একটি অ্যাপার্টমেন্ট থ্রেডযুক্ত COM বর্গ অবশ্যই একটি STA থ্রেডে তৈরি করা উচিত created আপনি এটি নেট। প্রোগ্রামে ফিরে দেখতে পারবেন, উইন্ডোজ ফর্ম বা ডাব্লুপিএফ প্রোগ্রামের ইউআই থ্রেডের এন্ট্রি পয়েন্টটিতে [স্ট্যাথ্রেড] বৈশিষ্ট্য রয়েছে। অন্যান্য থ্রেডের জন্য অ্যাপার্টমেন্টের মডেলটি থ্রেড.সেট অ্যাপার্টমেন্ট স্টেট () পদ্ধতি দ্বারা সেট করা হয়েছে।
উইন্ডোজ প্লাম্বিংয়ের বড় অংশগুলি ইউআই থ্রেডটি এসটিএ না হলে সঠিকভাবে কাজ করবে না। উল্লেখযোগ্যভাবে ড্রাগ + ড্রপ, ক্লিপবোর্ড, ওপেনফিলডায়ালগের মতো উইন্ডোজ সংলাপগুলি, ওয়েব ব্রাউজারের মতো নিয়ন্ত্রণগুলি, স্ক্রিনের পাঠকদের মতো ইউআই অটোমেশন অ্যাপস। অফিসের মতো অনেকগুলি সিওএম সার্ভার।
এসটিএ থ্রেডের জন্য কঠোর প্রয়োজন হ'ল এটি কখনই ব্লক করা উচিত নয় এবং অবশ্যই বার্তা লুপটি পাম্প করতে হবে। বার্তাটির লুপটি গুরুত্বপূর্ণ কারণ এটিই সিওএম একটি থ্রেড থেকে অন্য থ্রেডে একটি ইন্টারফেস পদ্ধতির কল মার্শাল করতে ব্যবহার করে। যদিও .NET মার্শালিং কলগুলি সহজ করে তোলে (উদাহরণস্বরূপ কন্ট্রোল.বিগিনআইভোক বা ডিসপ্যাচার.বাগিনআইভোক), এটি করা খুব জটিল বিষয়। কলটি সম্পাদন করে এমন থ্রেড অবশ্যই একটি সুপরিচিত অবস্থায় থাকতে হবে। আপনি কেবল ইচ্ছামতভাবে কোনও থ্রেড বাধা দিতে পারবেন না এবং একটি পদ্ধতি কল করতে বাধ্য করতে পারবেন না, এটি ভয়াবহ পুনরায় প্রবেশের সমস্যার কারণ হতে পারে। একটি থ্রেডটি "অলস" হওয়া উচিত, কোনও প্রোগ্রাম যা প্রোগ্রামের স্থিতি পরিবর্তিত করে তা কার্যকর করতে ব্যস্ত না।
সম্ভবত আপনি দেখতে পাচ্ছেন কোথায় এটি বাড়ে: হ্যাঁ, যখন কোনও প্রোগ্রাম বার্তা লুপটি কার্যকর করে, এটি নিষ্ক্রিয়। আসল মার্শালিং একটি গোপন উইন্ডো যা COM তৈরি করে তার মাধ্যমে সঞ্চালিত হয়, এটি পোস্টম্যাসেজ ব্যবহার করে সেই উইন্ডোটির উইন্ডো পদ্ধতিটি কোড চালায় কোড ute এসটিএ থ্রেডে। বার্তা লুপটি নিশ্চিত করে যে এই কোডটি চলমান।