واضح آرشیو وب فارسی:سایت ریسک: mespio15-07-2008, 01:10 AMبا سلام.مي خواستم يک داده ي اشتراکي بين دو AppDomain متفاوت ايجاد کنم. مثل Mutex, Semapher, و يا EventwaitHandle . کمي تو کلاس MarshalByRefObject کيج شدم. ممنون مي شم بتونيد کمکم کنيد. با تشکر someone15-07-2008, 05:22 PMسلام در Net. کلاسی به نام Mutexوجود داره که به راحتی می تونین از اون برای به اشتراک گذاشتن یک Resource بین دو Thread استفاده کنید. در ساده ترین حالت کافی Resource مورد نظرتون رو بین دو متود WaitOne و ReleaseMutex قرار بدین/ و همین طور در مورد Semaphore . از Semaphore برای محدود کردن تعداد دسترسی ها به یک Resource مشخص هست. مثلا به طور همزمان تنها 3 Thread میتونین به یک Object دسترسی داشته باشن و Thraed چهارم باید در انتظار بمونه. برای استفاده از اون کافی از دو متود WaitOne و Release استفاده کنین. در مورد این کلاس ها نمونه ها و مثال های زیادی وجود داره. اگه نیاز به توضیح بیشتر داشت خبر بدین. موفق باشین. mespio17-07-2008, 02:48 AMشناخت کامل و جامع روی Mutex, semaphore ,EventWaitHandle دارم. اما سوال من راجب دسترسی به Typed define هایی که از MarshalByRefObject به ارث می بره تا بشه بین AppDomain ها آن تایپ رو مشترکا به ارث برد. برای مثال فرض کنید من می خواهم مسئله تولید کننده- مصرف کننده رو با Monitor تو دو AppDomain متفاوت و به صورت همزمان با هم داشته باشم. حال سوال اینجاست که چطوری میشه آن Object که واسه Lock کردن از طریق Monitor انجام میشه بین تو تا AppDomain استفاده کرد. این مسئله رو با Mutex و Semaphore و EventWaitHandle حل کردم. اما با Monitor روی آبجکت واسه Lock کردن هنوز نتونستم! باز هم ممنون از لطفتون که اگه تونستید راهنمایی کنید. ممنون someone17-07-2008, 10:38 AMدوباره سلام همونطور که خودتون می دونین ارتباط بین AppDomain های متفاوت از دو طریق انجام میشه 1- انتقال یک Copy از همه محدوده ی AppDomain 2-استفاده از یک Proxy برای Message Exchanging از طرف دیگه باز همونطور که شما نوشتین Type ها باید از کلاس MarshalByRefobject به ارث برده بشن. که دلیل استفاده از MarshalByRefobject کاملا روشنه. در اینجا سوالی برای من پیش اومده. در مورد مساله ی procuder-costomer شما هر کدوم از بخش ها رو در یک AppDomain ایجاد کردین؟ میتونم نحوه پیاده سازی شما رو ببینم؟ ضمنا تعریفتون از Application Domain چیه؟ اما اگه سوالتون در مورد استفاده از Monitor در مساله ی گفته شده است به کد زیر مراجعه کنین:http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml _H2_17-07-2008, 07:19 PMسلام با اجازه کاربر someone... این چیزی که شما نیاز دارید، ارتباطات DDE است که در VB 6 پشتیبانی میشد ولی مایکروسافت آنرا در دات نت حذف کرد، چون چندان منطقی نمیدانست! (گرچه هنوز خود explorer مایکروسافت در جاهایی از ان استفاده میکند) - اگر برنامه شما در یک PC واحد اجرا میشود که به جای ایجاد چند برنامه برای چند پنجره یک برنامه واحد MDI بسازید که چند Child داشته باشد. - اگر هم برنامه در چند PC متفاوت باید به هم وصل شوند که باید از سوکت استفاده کنید. راه اصولی اینها هستند. ولی اگر بر انجام این عمل پافشاری دارید، چند راه دارید. 1- اگر یکی از برنامه ها دیگری را راه اندازی میکند یا این که یکی از برنامه ها در هر لحظه فقط یک نسخه اش میتواند در RAM باشد، میتوانید شی ای در حافظه قرار دهید و آدرس آن مکان را با خط Command به برنامه دوم پاس دهید تا به آن نقطه رجوع کند. 2- برای ارسال اطلاعات میتوان از کلاسس System.Diagnostics.Process استفاده کرد ولی من فقط روی نوع Consol میدانم که جواب میدهد و بعید میدانم برای برنامه های عادی جواب دهد. 3- هنوز هم میتوانید از برنامه نویسی سطح سوکت و یا Net Remoting استفاده کنید. 4- مطمئن نیستم ولی فک کنم API های DDE در user32 باشد که اگر به مرجع msdn مراجعه کنید، شاید هنوز بتوانید از این تکنولوژی، قبل از انقراض استفاده کنید. اگر توضیح دهید برای چه به همچین کدی نیاز دارید و چه میخواهید بکنید، میشود راه حل های جدید و اصولی بهتری را معرفی کرد. موفق باشید. mespio19-07-2008, 10:59 AMسلام بر دو دوست گرامی کاربر Someone من می خوام بدونم که چطوری می تونم با تبادل پیام کار کنم؟ حالا که کلاسی رو از Marshal ارث بری کردم چطوری می شه یک proxy از آن شئی در یک AppDomain دیگر استفاده کرد؟ منظورمو با یک مثال ساده بیان می کنم: "فرض کنیم دو ConsoleApplication داریم که بین این دو یک Object با استفاده از روش Message Exchanging با هم ارتباط دارند.به طوری که اگه هر کدام از آنها تغییری در Object ایجاد کند آن دیگری این تغییر را خواهد دید. حال سوال اینجاست این ارتباط بین این دو برنامه چگونه ایجاد می شود تا هر دو بتوانند تغییرات را مشاهده کنند؟ فرض کنید هر دو برنامه(منظورم ConsoleApplication است)یک ناحیه بحرانی دارند که با استفاده از Monitor و آن Object مشترک بین دو برنامه قفل می شود.پس مسلما اگر هردو برنامه با هم اجرا شوند فقط یکی از آنها می تواند وارد ناحیه بحرانی شود به شرط اینکه این ارتباط برای Object مشترک بین دو برنامه درست باشد و دیگری منتظر می ماند تا Object هز حالت قفل خارج شود" این کار را با Mutex و یا کلاس های برای کنترل در سطح سیستم عامل مثل EventWaiteHandle ها و ... انجام داده ام. فقط می خواهم با این نحوه هم انجام دهم. چطوری می شود این ارتباط رو برقرار کرد و کار کرد؟ باز هم ممنون از لطف هر دو دوست عزیز سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 376]