[ و گفته‏اند که در روزگار خلافت عمر بن خطاب از زیور کعبه و فراوانى آن نزد وى سخن رفت ، گروهى گفتند اگر آن را به فروش رسانى و به بهایش سپاه مسلمانان را آماده گردانى ثوابش بیشتر است . کعبه را چه نیاز به زیور است ؟ عمر قصد چنین کار کرد و از امیر المؤمنین پرسید ، فرمود : ] [ قرآن بر پیامبر ( ص ) نازل گردید و مالها چهار قسم بود : مالهاى مسلمانان که آن را به سهم هر یک میان میراث بران قسمت نمود . و غنیمت جنگى که آن را بر مستحقانش توزیع فرمود . و خمس که آن را در جایى که باید نهاد . و صدقات که خدا آن را در مصرفهاى معین قرار داد . در آن روز کعبه زیور داشت و خدا آن را بدان حال که بود گذاشت . آن را از روى فراموشى رها ننمود و جایش بر خدا پوشیده نبود . تو نیز آن را در جایى بنه که خدا و پیامبر او مقرر فرمود . [ عمر گفت اگر تو نبودى رسوا مى‏شدیم و زیور را به حال خود گذارد . ] [نهج البلاغه]
لوگوی وبلاگ
 

آمار و اطلاعات

بازدید امروز :58
بازدید دیروز :28
کل بازدید :872769
تعداد کل یاداشته ها : 1319
04/4/21
3:30 ع
مشخصات مدیروبلاگ
 
آذر آموزش[45]
باسلام من در شغل تدریس کامپیوتر هستم و دراکثر شاخه های کامپیوتر فعالیت دارم

خبر مایه
لوگوی دوستان
 

چگونه تشخیص دهیم که یک برنامه در حال اجراست؟ (شماره 368)

منبع : http://www.pooyeshr.com
در دلفی
گاهی پیش می آید که بخواهیم زمانی که برنامه ما در حال اجرا می باشد کاربر نتواند آن را مجددا اجرا کند . چرا که ممکن است در منابع بکار گرفته شده توسط برنامه خللی ایجاد گردد . این ترفند بخصوص در برنامه های بانک اطلاعاتی کاربرد زیادی می تواند داشته باشد چرا که اجرای مجدد برنامه و دستکاری آن در رکوردهای بانک اطلاعاتی همان برنامه ( به شرط آنکه بانک اطلاعاتی توسط اجرای اول تسخیر نشده باشد چرا که در آن صورت تا زمانیکه اجرای اول فایل را آزاد نکند دستکاری رکورد ها غیر ممکن است ) اختلالات جبران ناپذیری بوجود می آورد . پس در ابتدای کار لازم است بدانیم آیا برنامه ما در حال اجرا می باشد یا نه سپس تصمیمات لازم را اخذ کنیم . بطور مثال برای کاربر پیغام دهیم که برنامه هم اکنون در حال اجرا می باشد .

ابتدا بلاک اصلی پروژه را باز کنید . این عمل را می توانید با فشردن کلیدهای 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 باشد مسلم است که برنامه در حال اجرا می باشد .