چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
با سلام خدمت تمامي دوستان گرامي،
من دو تا سؤال برام پيش اومده که خودم دقيق نمي دونم اصطلاح اين کار چي هست تا بتونم تو اينترنت جستجو کنم واسه همين مزاحم شما شدم :چشمک:
سؤال اول: اگه دقت کرده باشيد هنگامي که کار سنگيني (ترجيحا يک پروسس تکي سنگين) در فرم صورت مي گيره، فرم به اصطلاح به حالت هنگ (يا همون قفل) در مياد و مادامي که اون پروسس تموم نشده کاربر احساس مي کنه که فرم Lock شده و نمي تونه اون رو جابجا کنه در صورتي که من در بسياري از برنامه ها (مخصوصا پروسس هاي خود ويندوز) ديدم که هنگامي که پردازش هاي سنگين هم انجام ميشه اين حالت براي فرم پيش نمياد بلکه بخشي از فرم که نشون دهنده اين هست که پردازش در حال انجام هست در حال کار هست (مثلا با نمايش يک پيام انتظار يا ...) - اميدوارم سؤالم رو خوب مطرح کرده باشم و منظورم رو خوب منتقل کرده باشم :لبخند: ، البته من منظورم استفاده از Application.ProcessMessages که براي پردازش هاي پشت سر هم انجام ميشه نيستش چرا که اون فقط وقتي تأثيرش رو نشون ميده که پردازش قبلي کامل تموم شده باشه.
سؤال دوم: من ميخوام کاري کنم تا برنامه حتي از بخش Process مربوط به Task Manager ويندوز هم نتونه End Process بشه، چيزي شبيه برنامه هاي امنيتي مثل Deep Freeze که اگه دقت کرده باشيد وقتي کاربر سعي مي کنه Process مربوط به Deep Freeze رو ببنده با پيام خطا مواجه ميشه.
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
جواب سوال اول:
پردازش های سنگین را باید در یک Thread جداگانه اجرا کنید. در حالت عادی Thread اصلی برنامه وظیفه رسم و بروزرسانی رابط کاربر را برعهده دارد. وقتی در همین Thread پردازش سنگینی صورت می گیرد، Thread اصلی فرصت بروز کردن رابط کاربر و پاسخ به درخواست های کاربر را پیدا نمی کند؛ در نتیجه رابط کاربر به حالت قفل شده در میاید.
درباره نحوه ایجاد Thread و مفهوم Thread قبلا بحث شده.
جواب سوال دوم:
باید در تاپیک جداگانه ایی مطرح شود. هر تاپیک برای بحث درباره یک سوال است.
4 ضمیمه
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
سلام ، سه تا کامپوننت میزارم که دوتاش کار آقای سالار خلیل زاده(Salarsoft) ست ، در ضمن برای بسته نشدن پروسسها باید دنبال عبارت hook procesess یا hook api توی اینترنت بگردی که من توصیه میکنم سری به سایت www.madshi.net ، قسمت هوک ای پی آی ش بزنی که یه سری کامپوننت و مثال واسه این کار داره یه نگاهی هم به سمپله خودم بنداز ، البته مشکلی که داره اینه که از توی کاربر مهمان ویندوز میشه بستش .
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
سلام، در مورد سوال اول باید بگم که اگه بخوای یه کار بی دردسر انجام بدی و فقط می خوای که ظاهر فرم برنامه ات حفظ بشه، می تونی از دستور Repaint برای فرمت استفاده کنی. به عنوان مثال :
for i:=1 to 1000 do begin
...
Form1.Repaint;
...
end;
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
نقل قول:
سلام، در مورد سوال اول باید بگم که اگه بخوای یه کار بی دردسر انجام بدی و فقط می خوای که ظاهر فرم برنامه ات حفظ بشه، می تونی از دستور Repaint برای فرمت استفاده کنی.
این میشه مشابه همون کاری که Application.ProcessMessages انجام میده. البته با قابلیت کمتر.
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
نقل قول:
نوشته شده توسط
persianboy
سلام ، سه تا کامپوننت میزارم که دوتاش کار آقای سالار خلیل زاده(Salarsoft) ست ، در ضمن برای بسته نشدن پروسسها باید دنبال عبارت hook procesess یا hook api توی اینترنت بگردی که من توصیه میکنم سری به سایت
www.madshi.net ، قسمت هوک ای پی آی ش بزنی که یه سری کامپوننت و مثال واسه این کار داره یه نگاهی هم به سمپله خودم بنداز ، البته مشکلی که داره اینه که از توی کاربر مهمان ویندوز میشه بستش .
دوست عزیز من وارد این سایت شدم و فایل madCollection.exe رو هم دانلود کرم اما وقتی میخاد نصب بشه liseen می خاد باید چیکار کنم.
و وقتی نمونه برنامه Hook API.rar رو دان کردم نمیشه فایل dpr رو ادیت کرد این ایراد
[Fatal Error] ALIREZA.dpr(9): File not found: 'madRemote.dcu'
رو می گیره.
چی کار کنم.
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
madCollection قبلا رایگان بود، ولی بخاطر استفاده هایی که بعضی کاربران از آن برای تولید کدهای مخرب کردند، نویسنده آن تصمیم گرفت عرضه رایگان آن را متوقف کند.
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
نقل قول:
نوشته شده توسط
Delphi-7
حالا یکی رایگانشو به ما بده
یا LICENSE رو بدید
برای کدهای مخرب به خدا نمی خوام
عزیزم اینجا که امامزاده نیست قسم و آیه می دی......
Email خودتو تو یک PM خصوصی به من بده تا بگم از کجا تهیه کنی.
موفق باشی.
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
مهندس جان آدرس رايگانش رو براي منم ايميل ميدي؟
jahani1357@yahoo.com
ممنون از لطف شما
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
سلام
ببخشید من ترد و اینجور چیزها تا حالا استفاده نکردم.
آیا با استفاده از Thread میشه انجام عملیات گرافیکی رو تسریع کرد؟ یا استفادش تنها جلوگیری از قفل برنامه است؟
جناب persianboy اگه میشه یه توضیحی در مورد ThreadTimer و ThreadWorker بدین .
آیا من می تونم در OnExecute تابع گرافیکی خودم رو اجرا کنم؟
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
نقل قول:
آیا با استفاده از Thread میشه انجام عملیات گرافیکی رو تسریع کرد؟
استفاده از ترد به انجام سریعتر کدهای شما آنچنان کمکی نمیکنه. استفاده از این متود با عث میشه که مین ترد به بازسازی اینترفیس برنامه و عملیات دیگه راحت تر برسه.
سرعت انجام عملیات گرافیکی یا ریاضی به قدرت پردازنده و رمتون بر میگرده.
نقل قول:
مورد ThreadTimer و ThreadWorker
من به شخصه استفاده از این ابزارها رو پیشنهاد نمیکنم. من قبل ازشون استفاده میکردم. مشکلاتی برام پیش می آورد(البته در برنامه های کاربردی و بزرگ).
بهتره برای اجرای ترد خودتون کد نویسی کنید و مدیریتش رو خودتون به عهده بگیرید.
موفق باشید.
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
نقل قول:
آیا با استفاده از Thread میشه انجام عملیات گرافیکی رو تسریع کرد؟
چه عملیات گرافیکی ؟ توسط ترد میشه چند پردازش رو به صورت موازی انجام داد ، شما میتونید عملیات گرافیکیتون رو به بخش های مختلفی تقسیم کنید و انجام هر بخش رو به یک ترد بسپارید و در آخر کار اطلاعات این تردها رو جمع آوری کنید ، حالا به جای اینکه مثلا برای 4 عملیات 4 ثانیه صبر کنید ( فرض کنید در این مثال هر عملیات 1 ثانیه طول میکشه ) میتونید 4 ترد بسازید که همزمان کار کنن و هرکدوم یک کار رو انجام بدن و تو مدت 1 ثانیه اون کار ها رو انجام بدید ؛ این مثال خیلی خوشبینانه بود ولی در کل بله ؛ شدنیه .
البته مدیریت همچین عملیات هایی بسیار پیچیده هست و اگر تازه کار با تردها رو شروع کردید ، حالا حالا ها کار دارید ...
نقل قول:
استفاده از ترد به انجام سریعتر کدهای شما آنچنان کمکی نمیکنه.
!
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
نقل قول:
ستفاده از ترد به انجام سریعتر کدهای شما آنچنان کمکی نمیکنه.
این جمله رو در مثالی که برای خودم پیش اومده میبینم.
من در یه تردی از صفحه دسکتاپ عکس میگیرم(به طور مثال در حلقه ای برای 1000 بار ) و در فایلی ذخیره میکنم . با اینکه این عملیات داره در یه ترد دیگه اجرا میشه و برنامه قفل نیست اما مقدار usage سی پی یو با حالت تک ترد فرقی نمیکنه و همچنین سرعتی در عکس گرفتن و ریخته شدن در فایل حس نمیشه. به جز مواقعی که مثل مثال شما چندین عملیات رو نیاز باشه پشت سر هم انجام بدیم ، که در این صورت با موازی انجام دادن این عملیات زودتر به پایان عملیات کاری میرسیم.
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
یه سوال دیگه که مستقیما به موضوع تاپیک مربوط نمیشه: آیا استفاده از Application.ProcessMessages در یک حلقه باعث نمیشه سرعت برنامه به شدت پایین بیاد؟
نقل قول: چگونه از قفل شدم فرم جلوگيري کنم؟ جلوگيري از بسته شدن پروسس؟
نقل قول:
نوشته شده توسط
mbshareat
یه سوال دیگه که مستقیما به موضوع تاپیک مربوط نمیشه: آیا استفاده از Application.ProcessMessages در یک حلقه باعث نمیشه سرعت برنامه به شدت پایین بیاد؟
بارها در مورد Application.ProcessMessage تو این بخش توضیح دادم ؛ بستگی داره تو Message Queue ترد اصلی برنامتون چه پیغام هایی وجود داشته باشه و تعدادشون چند تا باشه ، ولی در کل استفاده از ProcessMessage در یک حلقه علاوه بر اینکه تائثیر بسزایی تو کاهش سرعت داره ، کارخطرناک و غیر فنی هم هست .