بازگشت   کلوب آموزش ایرانیان > انجمن برنامه نویسی و طراحی سایت > سایر زبان های برنامه نویسی > Delphi

پاسخ
 
LinkBack ابزارهای موضوع نحوه نمایش
قدیمی 12-02-2008, 06:18 AM   #1 (permalink)
کاربر ویژه

 
Nazila آواتار ها
 

تاریخ عضویت: Nov 2008
نوشته ها: 1,040
سپاس گذاری: 2,031
سپاس گذاری شده 1,324 در 684 پست
Posticon (1) چگونه تشخيص دهيم برنامه ما در حال اجراست ؟

گاهي پيش مي آيد كه بخواهيم زماني كه برنامه ما در حال اجرا مي باشد كاربر نتواند آن را مجددا اجرا كند . چرا كه ممكن است در منابع بكار گرفته شده توسط برنامه خللي ايجاد گردد . اين ترفند بخصوص در برنامه هاي بانك اطلاعاتي كاربرد زيادي مي تواند داشته باشد چرا كه اجراي مجدد برنامه و دستكاري آن در ركوردهاي بانك اطلاعاتي همان برنامه ( به شرط آنكه بانك اطلاعاتي توسط اجراي اول تسخير نشده باشد چرا كه در آن صورت تا زمانيكه اجراي اول فايل را آزاد نكند دستكاري ركورد ها غير ممكن است ) اختلالات جبران ناپذيري بوجود مي آورد . پس در ابتداي كار لازم است بدانيم آيا برنامه ما در حال اجرا مي باشد يا نه سپس تصميمات لازم را اخذ كنيم . بطور مثال براي كاربر پيغام دهيم كه برنامه هم اكنون در حال اجرا مي باشد .

ابتدا بلاك اصلي پروژه را باز كنيد . اين عمل را مي توانيد با فشردن كليدهاي Ctrl + F12 و سپس انتخاب يونيت اصلي پروژه انجام دهيد .

در ابتدا در قسمت معرفي يونيت ها يونيت Windows را اضافه كنيد :

کد:
Uses Windows;
حال در قسمت تعريف متغير ها , متغيري از نوع THandle تعريف كنيد :

کد:
Var Mutex : THandle;
Mutex يك مقدار 32 بيتي براي تشخيص يكتا بودن يك منبع مي باشد.

حال به بلاك اصلي برنامه مي رسيم كه مي بايست كد آن را به صورت زير تغيير دهيد :

کد:
begin Mutex:=CreateMutex(nil,False,'OneCopyMutex');
if WaitForSingleObject(Mutex,0) <> wait_TimeOut then
begin Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
تابع CreateMutex متغيري كه از نوع THandle تعريف كرده ايد را با مقدار اوليه OneCopyMutex مقدار دهي مي كند . توجه داشته باشيد كه در واقع منظور از اين مقدار دهي اوليه قرار دادن رشته OneCopyMutex در متغير نيست بلكه متغير براي تشخيص وجود يك كپي از يك منبع مقدار دهي اوليه مي شود.

حال با استفاده از شرط if WaitForSingleObject(Mutex,0)<>wait_TimeOut then تشخيص مي دهيم كه آيا يك كپي ديگر از Mutex تعريف شده است يانه. كه چنانچه مقدار برگشتي تابع WaitForSingleObject برابر با wait_TimeOut باشد مسلم است كه برنامه در حال اجرا مي باشد.
Nazila آنلاین نیست.   پاسخ با نقل قول
3کاربر زیر از آقا/خانم Nazilaبه خاطر پست مفیدش سپاس گذاری کردند:
پاسخ

علاقه مندی ها (Bookmarks)

برچسب ها
ما, چگونه, اجراست, برنامه, تشخيص, حال, دهيم, در

ابزارهای موضوع
نحوه نمایش

مجوز های ارسال و ویرایش
شما نمیتوانید موضوع جدیدی ارسال کنید
شما امکان ارسال پاسخ را ندارید
شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
شما نمیتوانید پست های خود را ویرایش کنید

BB code هست فعال
شکلک ها فعال است
کد [IMG] فعال است
کد HTML غیر فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال



اکنون ساعت 05:47 AM برپایه ساعت جهانی (GMT - گرینویچ) +4.5 می باشد.


Design By: Saeed & Mohammad
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO
هرگونه کپی برداری بدون ذکر منبع پیگرد قانونی دارد.

Page Rank Check