تبلیغات :
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: ايجاد يک Object مشترک بين Application Domain

  1. #1
    در آغاز فعالیت
    تاريخ عضويت
    Oct 2006
    پست ها
    12

    14 ايجاد يک Object مشترک بين Application Domain

    با سلام.مي خواستم يک داده ي اشتراکي بين دو AppDomain متفاوت ايجاد کنم. مثل Mutex, Semapher, و يا EventwaitHandle . کمي تو کلاس MarshalByRefObject کيج شدم. ممنون مي شم بتونيد کمکم کنيد.
    با تشکر

  2. #2
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام
    در Net. کلاسی به نام Mutexوجود داره که به راحتی می تونین از اون برای به اشتراک گذاشتن
    یک Resource بین دو Thread استفاده کنید. در ساده ترین حالت کافی Resource مورد نظرتون رو
    بین دو متود WaitOne و ReleaseMutex قرار بدین/
    و همین طور در مورد Semaphore .
    از Semaphore برای محدود کردن تعداد دسترسی ها به یک Resource مشخص هست. مثلا به طور همزمان
    تنها 3 Thread میتونین به یک Object دسترسی داشته باشن و Thraed چهارم باید در انتظار بمونه.
    برای استفاده از اون کافی از دو متود WaitOne و Release استفاده کنین.

    در مورد این کلاس ها نمونه ها و مثال های زیادی وجود داره.
    اگه نیاز به توضیح بیشتر داشت خبر بدین.
    موفق باشین.

  3. #3
    در آغاز فعالیت
    تاريخ عضويت
    Oct 2006
    پست ها
    12

    پيش فرض

    شناخت کامل و جامع روی Mutex, semaphore ,EventWaitHandle دارم. اما سوال من راجب دسترسی به Typed define هایی که از MarshalByRefObject به ارث می بره تا بشه بین AppDomain ها آن تایپ رو مشترکا به ارث برد.
    برای مثال فرض کنید من می خواهم مسئله تولید کننده- مصرف کننده رو با Monitor تو دو AppDomain متفاوت و به صورت همزمان با هم داشته باشم. حال سوال اینجاست که چطوری میشه آن Object که واسه Lock کردن از طریق Monitor انجام میشه بین تو تا AppDomain استفاده کرد.
    این مسئله رو با Mutex و Semaphore و EventWaitHandle حل کردم. اما با Monitor روی آبجکت واسه Lock کردن هنوز نتونستم!
    باز هم ممنون از لطفتون که اگه تونستید راهنمایی کنید.
    ممنون

  4. #4
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام
    همونطور که خودتون می دونین ارتباط بین AppDomain های متفاوت از دو طریق انجام میشه
    1- انتقال یک Copy از همه محدوده ی AppDomain
    2-استفاده از یک Proxy برای Message Exchanging
    از طرف دیگه باز همونطور که شما نوشتین Type ها باید از کلاس MarshalByRefobject به ارث
    برده بشن. که دلیل استفاده از MarshalByRefobject کاملا روشنه.

    در اینجا سوالی برای من پیش اومده.
    در مورد مساله ی procuder-costomer شما هر کدوم از بخش ها رو در یک AppDomain
    ایجاد کردین؟ میتونم نحوه پیاده سازی شما رو ببینم؟ ضمنا تعریفتون از Application Domain چیه؟



    اما اگه سوالتون در مورد استفاده از Monitor در مساله ی گفته شده است به کد زیر مراجعه
    کنین: [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  5. #5
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    با اجازه کاربر someone...
    این چیزی که شما نیاز دارید، ارتباطات DDE است که در VB6 پشتیبانی میشد ولی مایکروسافت آنرا در دات نت حذف کرد، چون چندان منطقی نمیدانست! (گرچه هنوز خود explorer مایکروسافت در جاهایی از ان استفاده میکند)

    - اگر برنامه شما در یک PC واحد اجرا میشود که به جای ایجاد چند برنامه برای چند پنجره یک برنامه واحد MDI بسازید که چند Child داشته باشد.

    - اگر هم برنامه در چند PC متفاوت باید به هم وصل شوند که باید از سوکت استفاده کنید.

    راه اصولی اینها هستند.

    ولی اگر بر انجام این عمل پافشاری دارید، چند راه دارید.
    1- اگر یکی از برنامه ها دیگری را راه اندازی میکند یا این که یکی از برنامه ها در هر لحظه فقط یک نسخه اش میتواند در RAM باشد، میتوانید شی ای در حافظه قرار دهید و آدرس آن مکان را با خط Command به برنامه دوم پاس دهید تا به آن نقطه رجوع کند.

    2- برای ارسال اطلاعات میتوان از کلاسس System.Diagnostics.Process استفاده کرد ولی من فقط روی نوع Consol میدانم که جواب میدهد و بعید میدانم برای برنامه های عادی جواب دهد.

    3- هنوز هم میتوانید از برنامه نویسی سطح سوکت و یا Net Remoting استفاده کنید.

    4- مطمئن نیستم ولی فک کنم API های DDE در user32 باشد که اگر به مرجع msdn مراجعه کنید، شاید هنوز بتوانید از این تکنولوژی، قبل از انقراض استفاده کنید.

    اگر توضیح دهید برای چه به همچین کدی نیاز دارید و چه میخواهید بکنید، میشود راه حل های جدید و اصولی بهتری را معرفی کرد.

    موفق باشید.

  6. #6
    در آغاز فعالیت
    تاريخ عضويت
    Oct 2006
    پست ها
    12

    پيش فرض

    سلام بر دو دوست گرامی
    کاربر Someone من می خوام بدونم که چطوری می تونم با تبادل پیام کار کنم؟ حالا که کلاسی رو از Marshal ارث بری کردم چطوری می شه یک proxy از آن شئی در یک AppDomain دیگر استفاده کرد؟
    منظورمو با یک مثال ساده بیان می کنم:
    "فرض کنیم دو ConsoleApplication داریم که بین این دو یک Object با استفاده از روش Message Exchanging
    با هم ارتباط دارند.به طوری که اگه هر کدام از آنها تغییری در Object ایجاد کند آن دیگری این تغییر را خواهد دید. حال سوال اینجاست این ارتباط بین این دو برنامه چگونه ایجاد می شود تا هر دو بتوانند تغییرات را مشاهده کنند؟
    فرض کنید هر دو برنامه(منظورم ConsoleApplication است)یک ناحیه بحرانی دارند که با استفاده از Monitor و آن Object مشترک بین دو برنامه قفل می شود.پس مسلما اگر هردو برنامه با هم اجرا شوند فقط یکی از آنها می تواند وارد ناحیه بحرانی شود به شرط اینکه این ارتباط برای Object مشترک بین دو برنامه درست باشد و دیگری منتظر می ماند تا Object هز حالت قفل خارج شود"
    این کار را با Mutex و یا کلاس های برای کنترل در سطح سیستم عامل مثل EventWaiteHandle ها و ... انجام داده ام. فقط می خواهم با این نحوه هم انجام دهم.
    چطوری می شود این ارتباط رو برقرار کرد و کار کرد؟
    باز هم ممنون از لطف هر دو دوست عزیز

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •