نمایش نتایج 1 تا 17 از 17

نام تاپیک: درباره Mutex , اگه ممکنه یه نمونه کد.

  1. #1
    کاربر دائمی آواتار MSHService
    تاریخ عضویت
    آذر 1387
    محل زندگی
    اکنون توی EJB
    پست
    207

    Unhappy درباره Mutex , اگه ممکنه یه نمونه کد.

    سلام به همه.
    من در مورد میوتکس اطلاعاتی می خواستم. اول جستجو کردم دیدم چیز بدر بخوری ندیدم مجبور شدم تاپیک زدم.
    فقط میدونم جهت همزمان سازی سرنخ ها به کار میره.
    ممنوم میشم اگه طرز کارش و یه نمونه کد برام بزارید.
    با تشکر


  2. #2

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    نمونه کدش چند بار در این تالار گذاشته شده. برای توضیحات درباره Mutex هم می توانید عبارتی مثل Thread Synchronization Objects را در اینترنت جستجو کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  3. #3
    کاربر دائمی آواتار MSHService
    تاریخ عضویت
    آذر 1387
    محل زندگی
    اکنون توی EJB
    پست
    207

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    اقا بخدا من پیدا نمی کنم تو این سایت هیچ کدی.
    من تازه واردم.
    لطفا کمکم کنید.

  4. #4

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    کاربرد Mutex
    نمونه سورس کد
    استفاده از Thread ها در دلفی

    این هم کتاب Multithreading - The Delphi Way نوشته Martin Harvey که مفصلا درباره Multithreading در دلفی ومفاهیم مربوط به آن، و Synchronization Objects (مثل Critical Section, Mutex, Semaphore, Event و غیره) توضیح داده:
    http://cc.codegear.com/Item/14809


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  5. #5
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    31
    پست
    886

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

     
    Mutex := CreateMutex(nil, True, 'MDIEditorTest');

    مشکل اینجاست که من اصلا از کد بالا سر در نمیارم!!!!!!!
    میشه لطف کنید بگید پارامتر هاش یه!؟..
    ممنون.

  6. #6
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    46
    پست
    1,046

    Post نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    مشکل اینجاست که من اصلا از کد بالا سر در نمیارم!!!!!!!
    میشه لطف کنید بگید پارامتر هاش یه!؟..
    ممنون.
    برای اینکه بتونین از کد بالا سر در بیارید باید با حداقل های مقدمات سیستم عامل آشنا باشید، سیستم عامل برای دسترسی همزمان (Synchronize Access) پروسسها (مثلا برنامه شما) به منابع سیستمی، از آبجکتهای (اشیاء طراحی شده به این منظور) متعددی استفاده می نماید، بعنوان مثال نواحی بحرانی (Critical Section) ، سمافور، میوتکس و ...
    روال همزمانی، برای این طراحی می شود که چند سرنخ (Thread) از یک یا چند پروسس، با دستیابی همزمان به یک قسمت از منابع سیستم (بعنوان مثال بخشی از حافظه)، با تاثیرگذاری همزمان باعث اختلال کار دیگری نگردند؛ در اینجا از سایر موارد چشم پوشی کرده و فقط در مورد آبجکت موردنظر (Mutex) توضیح کوتاهی داده می شود:

    ------------------------------------------------------------------------------------------------

    Mutex : mutual exclusion object
    به آبجکتی گفته می شود که بوسیله آن چند سرنخ قابلیت استفاده مشترک از منابع سیستمی مانند حافظه، سیستم فایل، منابع سخت افزاری و ... را فراهم می نماید. عموماً هنگام اجرای یک برنامه (پروسس)، این برنامه یک میوتکس برای تخصیص منابع سیستمی در ابتدا ایجاد کرده و از سیستم عامل درخواست قفل نمودن منابع تخصیص یافته برای خود را می نماید به این طریق سایر سرنخ ها هنگام کار این برنامه به منابع موردنظر دستیابی نخواهند داشت، درصورت قفل بودن میوتکس قبل از درخواست پروسس موردنظر، معمولاً سیستم عامل، برنامه درخواست کننده جدید برای میوتکس مشابه (با همان نام یا مشخصه) را در صف انتظار قرار میدهد و کنترل تا زمانیکه میوتکس موردنظر آزاد نشده باشد، به برنامه موردنظر داده نخواهد شد. در نهایت هنگامی که داده ها مورد نیاز میوتکس نبودند یا روال کاری برنامه به اتمام برسد، میوتکس آزاد شده و منابع به سیستم از حالت قفل در می آیند.

    ------------------------------------------------------------------------------------------------
    حالا درمورد CreateMutex تو دلفی :
    این تابع معادل CreateMutexA در API های kernel32 میباشد و با دادن پارامترهایی که ذیلا توضیح داده خواهد شد، هندلی (مشخصه میوتکس که سیستم عامل اختصاص میدهد) که سیستم عامل برای میوتکس درخواستی ما در نظر گرفته؛ به عنوان خروجی برمی گرداند. اگر میوتکس موردنظر قبل از فراخوانی تابع، وجود داشته باشد؛ تابع GetLastError مقدار ERROR_ALREADY_EXISTS را برمیگرداند، در غیر اینصورت مقدار بازگشتی تابع GetLastError صفر خواهد بود. پس شما پس از فراخوانی CreateMutex باید مقدار بازگشتی GetLastErrorرا چک کنید تا صفر باشد در غیر اینصورت میوتکس موردنظر قبلا ایجاد شده و تا زمان اتمام کار پروسس قفل کننده منابع مورد استفاده میوتکس، شما نمی توانید به آن دستیابی کنید، مگر اینکه نسخه دیگری از پروسس موردنظر با منابع مجزا اجرا نمایید.
    پارامترهای ورودی :

    • lpMutexAttributes : این پارامتر از نوع LPSECURITY_ATTRIBUTES (که در دلفی اشاره گر PSecurityAttributes به ساختار TSecurityAttributes می باشد) می باشد و بطور خلاصه ساختاری است که مشخص می کند که هندل موردنظر قابل ارث بری توسط پروسس های فرزندِ پروسس ما می باشد یا نه، درصورتیکه نخواهید هندل میوتکس قابلیت ارث بری داشته باشد مقدار آنرا nil قرار می دهید.
    • bInitialOwner : این پارامتر بولی، مالک اولیه آبجکت میوتکس را معین می نماید. در صورت True بودن، برنامه درخواست کننده (برنامه ما) دستور فوری برای مالکیت میوتکس را صادر می کند. در غیر اینصورت برنامه صاحب میوتکس نخواهد بود (مالکیت با پروسس والد -مثلا کرنل سیستم عامل- خواهد بود).
    • lpName : نامی است که ما برای میوتکس خود درنظر می گیریم. باید توجه نمایید که نام موردنظر حساس به متن (کوجک-بزرگی) بوده و شامل هر کاراکتری غیر از '\' می تواند باشد (البته حداکثر 260 کاراکتر). اگر این نام با نام میوتکس دیگری در سیستم معادل باشد، تابع CreateMutexیک درخواست MUTEX_ALL_ACCESS به آبجکت موجود میفرستد. در اینحالت پارامتر bInitialOwner بعلت موجود بودن پروسس ایجاد کننده میوتکس موردنظر نادیده گرفته می شود و در صورت عدم اجازه پروسس ایجاد کننده میوتکس درخواستی ما (که معمولا خود برنامه ماست و ما اینکار را نمی کنیم) تابع GetLastError مقدار ERROR_ALREADY_EXISTS را برمیگرداند و مقدار بازگشتی صفر می شود. اگر این نام با نام یکی از سمافورها، رخدادها و یا file-mapping ها معادل باشد، تابع GetLastError مقدار ERROR_INVALID_HANDLE میدهد، و باز هم مقدار بازگشتی عدد مثبتی نخواهد بود، تا دستیابی همزمان به یک قسمت از منابع سیستم رخ ندهد.

    در نهایت در صورتیکه شما دیگر با منابع سیستم کاری نداشته باشید، ReleaseMutex را میتوانید برای آزاد نمودن میوتکس موردنظر فراخوانی نمایید (در مواقع نادر ما چنین کاری می کنیم و باید کاملا از این موضوع مطمئن باشیم، معمولا با خاتمه کار برنامه این میوتکس بصورت خودکار توسط سیستم عامل آزاد می شود).

    موفق باشید.
    آخرین ویرایش به وسیله Saeed_m_Farid : شنبه 02 خرداد 1388 در 13:50 عصر دلیل: می a,vn به => می نماید

  7. #7
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    31
    پست
    886

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    همه چیز رو فهمیدم به جز موارد زید :
    lpMutexAttributes : این پارامتر از نوع LPSECURITY_ATTRIBUTES (که در دلفی اشاره گر PSecurityAttributes به ساختار TSecurityAttributes می باشد) می باشد و بطور خلاصه ساختاری است که مشخص می کند که هندل موردنظر قابل ارث بری توسط پروسس های فرزندِ پروسس ما می باشد یا نه، درصورتیکه نخواهید هندل میوتکس قابلیت ارث بری داشته باشد مقدار آنرا nil قرار می دهید.
    bInitialOwner : این پارامتر بولی، مالک اولیه آبجکت میوتکس را معین می نماید. در صورت True بودن، برنامه درخواست کننده (برنامه ما) دستور فوری برای مالکیت میوتکس را صادر می کند. در غیر اینصورت برنامه صاحب میوتکس نخواهد بود (مالکیت با پروسس والد -مثلا کرنل سیستم عامل- خواهد بود).
    ممنون. از توضیحتون

  8. #8
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    46
    پست
    1,046

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    همه چیز رو فهمیدم به جز موارد زید :
    lpMutexAttributes : این پارامتر از نوع LPSECURITY_ATTRIBUTES (که در دلفی اشاره گر PSecurityAttributes به ساختار TSecurityAttributes می باشد) می باشد و بطور خلاصه ساختاری است که مشخص می کند که هندل موردنظر قابل ارث بری توسط پروسس های فرزندِ پروسس ما می باشد یا نه، درصورتیکه نخواهید هندل میوتکس قابلیت ارث بری داشته باشد مقدار آنرا nil قرار می دهید.
    bInitialOwner : این پارامتر بولی، مالک اولیه آبجکت میوتکس را معین می نماید. در صورت True بودن، برنامه درخواست کننده (برنامه ما) دستور فوری برای مالکیت میوتکس را صادر می کند. در غیر اینصورت برنامه صاحب میوتکس نخواهد بود (مالکیت با پروسس والد -مثلا کرنل سیستم عامل- خواهد بود).
    ممنون. از توضیحتون
    یعنی فعلا در این حد، اولین پارامتر رو همیشه nil بدین ،دومی رو True و سومین پارامتر یه نام اختیاری هست ...

    پ.ن.: همونطوریکه گفتم اینا پارامترهای CreateMutex هستن.

  9. #9
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    31
    پست
    886

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    یعنی فعلا در این حد، اولین پارامتر رو همیشه nil بدین ،دومی رو True و سومین پارامتر یه نام اختیاری هست ...
    دلیلشو نمیگید!؟.

  10. #10
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    46
    پست
    1,046

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    دلیلشو نمیگید!؟.
    1. اولین پارامتر برابر nil : چون اونطوریکه من دیدم، شما تو برنامتون به احتمال قوی CreateProcess یا CreateSemaphore و ... ندارید، به همین علت لازم هم نیست که نگران ارث بری میوتکس ایجاد شده توسط برنامتون برای پروسس های فرزند باشید و برنامه فقط باید یکبار اجرا بشه ( و از طرف دیگه بتونید پارامترهای ارسالی به برنامه برای بار اول به بعد رو توسط همون یکبار اول، مدیریت کنید). پس برای این پارامتر مقداری معین نمیکنیم تا به سیستم بفهمانیم که ما نگران پروسسهای فرزند برنامه مون نیستیم!
    2. پارامتر دوم برابر True : چون مالکیت میوتکس ایجاد شده رو به خودمون اختصاص بدیم و بتونیم دفعه بعد هم از هندلی که سیستم به اون اختصاص داده برای تصمیم گیریهای بعدی استفاده کنیم ...

  11. #11
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    31
    پست
    886

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    : چون مالکیت میوتکس ایجاد شده رو به خودمون اختصاص بدیم و بتونیم دفعه بعد هم از هندلی که سیستم به اون اختصاص داده برای تصمیم گیریهای بعدی استفاده کنیم ...
    ببخشید که یکم دوزاریم دیر میفته...
    آخه هنوز مبتدی هستم !!!
    2 ماه که کلا برنامه نویسی رو شروع کردم...
    حالا منظورتون کدوم تصمیم گیری هاست!؟..

  12. #12
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    46
    پست
    1,046

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    ببخشید که یکم دوزاریم دیر میفته...
    آخه هنوز مبتدی هستم !!!
    2 ماه که کلا برنامه نویسی رو شروع کردم...
    حالا منظورتون کدوم تصمیم گیری هاست!؟..
    مثلا همون تصمیم گیریها که تو اینجا گفتم، در اون پست، قرار شد اگه میوتکس ایجاد شده همون میوتکس ما بود (میوتکسی که مالکیتش رو با True کردن پارامتر دوم به خودمون اختصاص دادیم) یعنی "نسخه ای از برنامه قبلا اجرا شده باشد"؛ پارامترها رو پاس بدیم به نسخه اجرا شده و ...

    خانم/آقای 1485159 :
    اولا نمیدونم شما غیر از این پستها، مطالب دیگه هم مطالعه میکنید یا نه، ولی هیچوقت به یه منبع اتکا نکنید.
    ثانیا : فکر نمی کنم با 2 ماه برنامه نویسی اینجا نقطه شروع مناسبی برای شما باشه، مطمئن باشید تو سطرهای بعدی سوالهای شما خیلی بیشتر و گیج کننده تر میشن، نظر من اینه که شما فعلا روی روالهای مستقیم مرتبط با API های سیستم و کار با توابع پیچیده تمرکز نکنید و بذارید فعلا کارتون راه بیافته و زیاد به کنه اونا نرید؛ عوض اینکار سعی کنید روی اعمالی که قراره بعد دریافت پارامترهای برنامه، انجام بدین تمرکز کنید : مثلا از EM Editor الگو بردارید، یعنی مثلا یه PageControl داشته باشید که بازاء هر درخواست {دابل کلیک رو فایل موردنظر شما} یه Page جدید باز کنید و قابلیت های فونت ،فرمت ، Copy/Paste و ... رو به editor تون اضافه کنید و ...
    ثالثا : اگه درس سیستم عامل پاس نکردین یا تسلط به مفاهیم پایه سیستم عامل ندارین، سعی کنید اول روی اونا انرژی بذارید؛ چون تا اینا رو ندونین از API ها چیزی سر در نمیارید ...

    موفق باشید.

  13. #13
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    31
    پست
    886

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    ثالثا : اگه درس سیستم عامل پاس نکردین یا تسلط به مفاهیم پایه سیستم عامل ندارین، سعی کنید اول روی اونا انرژی بذارید؛ چون تا اینا رو ندونین از API ها چیزی سر در نمیارید ...

    منظورتون تو دانشگاه!؟..
    نه بابا من هنوز اول دبیرستانم...
    پس فعلا برم دنبال کارای ساده تر!؟..
    ممنون. از راهنماییتون.

  14. #14

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    منظورتون تو دانشگاه!؟..
    نه بابا من هنوز اول دبیرستانم...
    پس فعلا برم دنبال کارای ساده تر!؟..
    ممنون. از راهنماییتون.
    من هم صحبت Saeed_m_Farid رو تایید میکنم ، شما وقتی 2 ماه هست که با مفاهیم برنامه نویسی آشنا شدید چرا دنبال اینجور مباحث میرید ؟ با این کار خودتون رو درگیر مسائلی میکنید که علاوه بر اینکه براتون سخته ممکنه به یادگیریتون لطمه بزنه ( شما رو از یادگیری بقیه ی چیزها دلسرد کنه ) کلی نمونه و مثال و مساله ی ساده تر و مناسب با اطلاعات شما هست که میتونید از اونها شروع کنید و یواش یواش اطلاعات خودتون رو بالا ببرید ، نه اینکه یه روزه بخواهید یه چیز مثل Microsoft Word رو بنویسید ...

    تو نت کلی مرجع و مقاله در این رابطه هست ، راحت میتونید اطلاعات خودتون رو بالا ببرید و به مرور زمان به پاسخ سوالات پیچیده تر خودت برسی .

  15. #15
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    46
    پست
    1,046

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    ثالثا : اگه درس سیستم عامل پاس نکردین یا تسلط به مفاهیم پایه سیستم عامل ندارین، سعی کنید اول روی اونا انرژی بذارید؛ چون تا اینا رو ندونین از API ها چیزی سر در نمیارید ...
    منظورتون تو دانشگاه!؟..
    نه بابا من هنوز اول دبیرستانم...
    پس فعلا برم دنبال کارای ساده تر!؟..
    ممنون. از راهنماییتون.
    اف تاپیک : WOW!!! واقعا بهتون تبریک میگم.
    ما (یا حداقل خود من) اون زمون فقط بلد بودیم برنامه های کنسول gw-Basic یا Q-Basic بنویسیم.
    {یادش به خیر اون صفحه مشکی های تحت DOS!}

    موفق باشید

  16. #16
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    31
    پست
    886

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    ما (یا حداقل خود من) اون زمون فقط بلد بودیم برنامه های کنسول gw-Basic یا Q-Basic بنویسیم.
    آخه اون موقع با الان فرق میکنه!!!
    من خودم وقتی خودمو با بعضی (تاکید میکنم که بعضی ) از هم سنام مقایسه میکنم میبینم که هیچی نمیدونم...

  17. #17

    نقل قول: درباره Mutex , اگه ممکنه یه نمونه کد.

    آخه اون موقع با الان فرق میکنه!!!
    من خودم وقتی خودمو با بعضی (تاکید میکنم که بعضی ) از هم سنام مقایسه میکنم میبینم که هیچی نمیدونم...
    دوست عزیز ره 100 ساله رو نمیشه یک شبه طی کرد ، شما نمیتونی در عرض 2 ماه همه چی رو یاد بگیری ، اون دوستان هم سن و سال شما هم یک شبه این چیزها رو یاد نگرفتن .

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •