PDA

View Full Version : آيا برنامه در حالا اجراست؟



ب- تات
پنج شنبه 25 تیر 1388, 19:55 عصر
چكونه مي توان متوجه شد برنامه ما در حال اجراست و هنگ نكرده ؟مثلا برنامه هايي كه به دليل نوع فعاليتشان هميشه بايد فعال باشند - يه كار صنعي و كنترلي.
همچنين در صورت هنگ كردن چطور ميشه دوباره بدون حضور آن را راه اندازي كرد؟ ممنون

tdkhakpur
پنج شنبه 25 تیر 1388, 20:09 عصر
سلام
ببینید هنگ کردن به برنامه مربوط نمیشود و هیچ راهی برای فرار از هنگ شده برنامه نیست .
خوب هنگ معنیش فقط داخل حلق افتادن cpu هست مثل این میماند که یک نفر نه گوشش بشنود و نه چشماش ببیند حالا شما بیا به این فرد بگو که یه کار برایتان اجام بدهد مگه میتواند؟.

Felony
جمعه 26 تیر 1388, 00:07 صبح
بله میشود ، شما برای برنامت میتونی یه پیغام بنویسی بعد با یه برنامه ی دیگه هر چند دقیقه پیغامی رو که برای برنامه ی اول نوشتی بهش پست میکنی ، اگه برنامه پاسخی داد یعنی فعال هست و هنگ نکرده ، اگر هم که جوابی از برنامه نگرفتی معلومه برنامه دچار مشکل شده و میتونی دوباره راه اندازیش کنی .

Diabolic
جمعه 26 تیر 1388, 00:19 صبح
چه جالب
میشه یه مثال بذارین ؟

ب- تات
جمعه 26 تیر 1388, 07:31 صبح
از لطفتون سپاسگذارم اگر امكان داره عملي تر توضيح بدين.

Felony
جمعه 26 تیر 1388, 11:29 صبح
من براتون یه نمونه نوشتم ، برنامه ی Program رو اجرا کنید بعد برنامه ی Tester رو اجرا کنید ، با کلیک کردن بر روی دکمه ی تست ، برنامه ی تست یه پیغام به برنامه ی مقصد ( Program ) میفرسته و منتظر جواب میمونه و با دریافت جواب عنوان دکمه به Program is Runing تغییر پیدا میکنه ، حالا با کلیک بر روی دکمه ی Start Lopp در برنامه ی مقصد یه حلقه به وجود میاد که موجب هنگ کردن برنامه به مدت چند ثانیه میشه ، تو این مدت زمان اگه تو برنامه ی Tester روی تست کلیک کنید هیچ پیغامی برای برنامه فرستاده نمیشه و میتونید اینجوری بفهمید برنامه هنگ کرده .

tdkhakpur
شنبه 27 تیر 1388, 12:23 عصر
من براتون یه نمونه نوشتم ، برنامه ی Program رو اجرا کنید بعد برنامه ی Tester رو اجرا کنید ، با کلیک کردن بر روی دکمه ی تست ، برنامه ی تست یه پیغام به برنامه ی مقصد ( Program ) میفرسته و منتظر جواب میمونه و با دریافت جواب عنوان دکمه به Program is Runing تغییر پیدا میکنه ، حالا با کلیک بر روی دکمه ی Start Lopp در برنامه ی مقصد یه حلقه به وجود میاد که موجب هنگ کردن برنامه به مدت چند ثانیه میشه ، تو این مدت زمان اگه تو برنامه ی Tester روی تست کلیک کنید هیچ پیغامی برای برنامه فرستاده نمیشه و میتونید اینجوری بفهمید برنامه هنگ کرده
با عرض احترام به مطالبتان.
ولی منظور ایشان هنگ کرده cpu میباشد نه نیمه جان شده cpu که به بعضی پیغامها جواب دهد و به سایر برنامه ها اهمیت ندهد.
خوب حالا اگر به پیغام شما هم جواب ندهد چه باید کرد.

Felony
شنبه 27 تیر 1388, 13:07 عصر
ولی منظور ایشان هنگ کرده cpu میباشد نه نیمه جان شده cpu که به بعضی پیغامها جواب دهد و به سایر برنامه ها اهمیت ندهد.
خوب حالا اگر به پیغام شما هم جواب ندهد چه باید کرد.
شما رو چه حسابی گفتین منظور ایشون هنگ کردن CPU هست ؟!؟!؟!

سوال ایشون این بود :

چكونه مي توان متوجه شد برنامه ما در حال اجراست و هنگ نكرده ؟
و دقیقا با همین روش میشه تشخیص داد نرم افزار هنگ کرده یا نه و اقدامات لازم رو انجام داد ...

ب- تات
شنبه 27 تیر 1388, 13:34 عصر
ببينيد ابتدا من واضح تر ميگم:
برنامه من در حال كنترل و ارتباط با يك سخت افزار هست كه تسبت به پيامهايي كه از سخت افزار دست سازم ميگيره براي اون فرمانهايي ميفرسته و سخت افزار هم نسبت به فرمان من كار خودش رو ميكنه مثلا يك فن را روشن ميكنه . حالا اگه به هر دليل برنامه هنگ كنه ديگه نمي تونه كارش رو انجام بده و .... حالا اگه بشه به هر دليل هنگ كردن برنامه را متوجه شد ميشه از ليست پروسسها اون رو حذف كرد و دوباره اجراش كرد.

Felony
شنبه 27 تیر 1388, 13:38 عصر
همون نمونه ای که من گزاشتم مشکلتون رو حل میکنه .

tdkhakpur
شنبه 27 تیر 1388, 14:35 عصر
سلام
خوب ببینید شما فقط مشکل نرم افزاری ندارید بلکه باید یک آی سی برای لچ کردن وضعیت دارید و داخل سخت افزار یاید الگوریتمی یا سنسوری پیاده سازی بشود که بتواند تشخیص دهد cpu قادر به پاسخگویی هست یا خیر . این کار باعث میشود که خطر احتمالی که ممکن هست 100% دستگاه شما را خراب کند از بین میرود.
ولی مطالبی را که اقای silver بیان کردنند مورد تایید و عملی هست اما آن هم دارای شرایطی هست که هدف شما را با احتمالات روبرو میکند.

Saeed_m_Farid
شنبه 27 تیر 1388, 14:59 عصر
شما رو چه حسابی گفتین منظور ایشون هنگ کردن CPU هست ؟!؟!؟!

و دقیقا با همین روش میشه تشخیص داد نرم افزار هنگ کرده یا نه و اقدامات لازم رو انجام داد ...
شما زیاد جدی نگیرید، پست 2# ایشون هم بر پایه فرضیات خودشان ارائه شده!

هنگ کردن برنامه یه امر نسبی از دید کاربر نهاییه؛ ممکنه پروسس برنامه (مخصوصاً برنامه های سیستمی - بقول دوستمون يه كار صنعي و كنترلي-) مدتی بعلت حجم بالای پردازش یا thread های ایجاد شده توسط برنامه مزبور در سیستم افزایش پیدا کنه، که به این منظور پارامتر timeout ای برای مدت مجاز پردازش زیاد درنظر گرفته میشه :


یه روش، چک کردن متوالی Process های دارای حجم بالا (همون کاری که دستی -از طریق Task Manager سیستم- انجام میدیم که تعداد نخ ها و وضعیت پردازشگر برای پروسس موردنظر و ...) هست و این پارامترها توسط توابع WMI سیستم قابل دسترس هستن که بحثش طولانیه و قبلاً توضیحاتی مفصل در این مورد تو همین سایت اومده (WMI API رو بگردید)...




روش شما با این فرض که سورس برنامه مبداء هم در دسترس هست قابل استناده؛ حالا اگه برنامه ای که باید چک بشه متعلق به خودمون نباشه چی؟ راه دیگه ای که به نظر میرسه و ساده تره استفاده از API های خود سیستم به این منظور مثل SendMessageTimeOut هست :


(************************************************* ***************)

function isHung(theWindow: HWnd;
aTimeOut: DWORD): Boolean;
var
dwResult,
dwTime: DWORD;
retval: Longint;
begin
Result:=False;
dwTime:=GetTickCount;
retval:=SendMessageTimeOut(theWindow,
WM_NULL,
0,
0,
SMTO_ABORTIFHUNG or SMTO_BLOCK,
aTimeOut,
dwResult);
dwTime:=GetTickCount - dwTime;
if (retval=0) then
if (dwTime<ATimeOut) then
Result:=True;
end;

(************************************************* ***************)
برای پیدا کردن هندل پنجره موردنظر هم از میتونید از
FindWindow(nil, 'Your Program Name');استفاده کنید و پارامتر بعدی هم حداکثر زمان مجاز موردنظر از دید شماست ...

درنهایت اگه isHung مقدار True برگردوند میتونید پروسس موردنظر رو KillTask کرده و با RunProcess مجدداً اجرا کنیدش (همین موارد رو هم تو همین تالار اگه جستجو کنید، آپ کردم) ...

Felony
شنبه 27 تیر 1388, 15:55 عصر
خوب ببینید شما فقط مشکل نرم افزاری ندارید بلکه باید یک آی سی برای لچ کردن وضعیت دارید و داخل سخت افزار یاید الگوریتمی یا سنسوری پیاده سازی بشود که بتواند تشخیص دهد cpu قادر به پاسخگویی هست یا خیر . این کار باعث میشود که خطر احتمالی که ممکن هست 100% دستگاه شما را خراب کند از بین میرود.
دوست عزیز من نمیخوام به دانسته های شما توهینی بشه ، یه مطلبی بگید که عملی و علمی باشه .

tdkhakpur
شنبه 27 تیر 1388, 23:39 عصر
سلام

شما زیاد جدی نگیرید، پست 2# ایشون هم بر پایه فرضیات خودشان ارائه شده!

باز با این اقا سعید گل و بلبل کونتاکت شدیم . عزیز من- من با شما هیچ مشکلی ندارم فقط نظر خودم را بیان کردم.
ببینید ایشان دارند با سخت افزار خارجی کار میکنند و شاید برای ایشون هزینه قابل توجهی داشته و من هم به این خاطر نظرم را اعلام کردم ببینید با توجه به کارهایی که بر روی نرم افزار شده حتی من هم به بعضی کارهای کامپیوترم هم شک دارم که مبادا ویروسی در کار هاش اختلال ایجاد کند. چه بماند به کسی که بالای دستگاهی هزینه پرداخت کرده که کارهاش توسط cpu کامپیوتر بصورت اتومات انجام بشود.
نظر شما برای من اهمیت نداره چون سواد هر کس به یک اندازه نیست ولی با توجه به تجربه اتوماسیون صنعتی و عوامل ناشی از خطاها و کنترلهای نامنظمی که cpu میتواند اعمال کند بالاخره مطالب خودم را ارائه دادم.
ولی کلا با جوجه برنامه نویسان بابت نظریات کوچیک خودشان تشکر و قدردانی میکنم که نشان میدهندچی چیزی به بارشان هست.
ولی آقای silver من گفتم این احتمال هست که همین راه که شما پیشنهاد کردید بسته باشد انشاءالله عملی بشود.
ببینید من با ارسال جواب حقوق و مستمری نمی گیرم فقط خواستم کمکی در حق ارسال کننده تاپیک داشته باشم. و بالاخره روزی میرسه که سنی از ما بگذره و از دور خارج بشویم.
موفق باشد.

Felony
یک شنبه 28 تیر 1388, 05:53 صبح
ولی کلا با جوجه برنامه نویسان بابت نظریات کوچیک خودشان تشکر و قدردانی میکنم که نشان میدهند چی چیزی به بارشان هست.
دوست عزیز من تو پست قبلم هم گفتم نمیخوام دانسته های شما رو زیر سوال ببرم ، ولی وقتی جنابعالی میای و اینطور صحبت میکنی و تو حرفات همه ی اعضا رو هدف قرار میدی ...

خوب شما که اینقدر تجربه داری چرا این راه حل های تئوری رو ارائه میدی ؟ اگر فکر میکنید عملی هست که توضیح بدید تا بنده و دیگر جوجه برنامه نویسان از شما که پدربزرگ برنامه نویسی هستین استفاده کنیم ؟

این که نشد راه حل :
داخل سخت افزار یاید الگوریتمی یا سنسوری پیاده سازی بشود که بتواند تشخیص دهد cpu قادر به پاسخگویی هست یا خیر
پاسخ شما بیشتر شبیه به یه پروژه تحقیقاتی میمونه تا یک کار عملی و قابل پیاده سازی .

Saeed_m_Farid
یک شنبه 28 تیر 1388, 08:51 صبح
سلام

باز با این اقا سعید گل و بلبل کونتاکت شدیم . عزیز من- من با شما هیچ مشکلی ندارم فقط نظر خودم را بیان کردم.
ببینید ایشان دارند با سخت افزار خارجی کار میکنند و شاید برای ایشون هزینه قابل توجهی داشته و من هم به این خاطر نظرم را اعلام کردم ببینید با توجه به کارهایی که بر روی نرم افزار شده حتی من هم به بعضی کارهای کامپیوترم هم شک دارم که مبادا ویروسی در کار هاش اختلال ایجاد کند. چه بماند به کسی که بالای دستگاهی هزینه پرداخت کرده که کارهاش توسط cpu کامپیوتر بصورت اتومات انجام بشود.
نظر شما برای من اهمیت نداره چون سواد هر کس به یک اندازه نیست ولی با توجه به تجربه اتوماسیون صنعتی و عوامل ناشی از خطاها و کنترلهای نامنظمی که cpu میتواند اعمال کند بالاخره مطالب خودم را ارائه دادم.
ولی کلا با جوجه برنامه نویسان بابت نظریات کوچیک خودشان تشکر و قدردانی میکنم که نشان میدهندچی چیزی به بارشان هست.
ولی آقای silver من گفتم این احتمال هست که همین راه که شما پیشنهاد کردید بسته باشد انشاءالله عملی بشود.
ببینید من با ارسال جواب حقوق و مستمری نمی گیرم فقط خواستم کمکی در حق ارسال کننده تاپیک داشته باشم. و بالاخره روزی میرسه که سنی از ما بگذره و از دور خارج بشویم.
موفق باشد.
با عقل خود گر جفتمي من گفتني ها گفتمي
خاموش كن تا نشنود اين قصه را باد هوا

vcldeveloper
یک شنبه 28 تیر 1388, 11:36 صبح
ولی کلا با جوجه برنامه نویسان بابت نظریات کوچیک خودشان تشکر و قدردانی میکنم که نشان میدهندچی چیزی به بارشان هست.
دوستان مراقب باشند از حدود خودشان خارج نشوند، وگرنه جریمه میشند.

Saeed_m_Farid
یک شنبه 28 تیر 1388, 16:38 عصر
سلام
عزیز من- من با شما هیچ مشکلی ندارم
...
ولی با توجه به تجربه اتوماسیون صنعتی و عوامل ناشی از خطاها و کنترلهای نامنظمی که cpu میتواند اعمال کند بالاخره مطالب خودم را ارائه دادم.
...
بالاخره روزی میرسه که سنی از ما بگذره و از دور خارج بشویم.
موفق باشد.
آقای کشاورز اجازه بدین بنده صحبت هام رو عرض کنم، چون ایشون عرایض مجمل بنده رو درست نمی تونن تحویل بگیرن.
من صلاح ایشون رو میخوام که تا دیر نشده دست از غروری که استعدادشون رو کور کرده بردارن، دوست عزیز tdkhakpur :




دوست عزیز، دوست داشتم موضوع رو باز نکنم ولی متوجه شدم باید موضوع واسه شما کامل بسط داده شه تا متوجه بشید و با اشاره متوجه نمی شید: شما همیشه می فرمایید "من با شما هیچ مشکلی ندارم"؛ ولی واقعیت اینه که مشکل دارید : نه با من، بلکه من احساس می کنم شما با خودتون هم درگیرید! یه آدم باید خیلی مشکل روانی (منظور همون عقده حقارت هست!) داشته باشه که در عرض 4 ماه نزدیک 650 تا پست (که اکثرشون هم بی محتوا هستند) بزنه و به یه اسم کاربری اینقدر حساس باشه و حافظه منفی و درگیری ذهنی از طرف نگه داره؛ از طرف دیگه در تمام زمینه ها (چه برنامه نویسی، چه امور جانبی!) به خودش اجازه اظهار نظر بده و در هر بابی بدون مستندات علمی اقدام بهبروز محتویات هضم نشده مغزی خودش بکنه ...
پردازنده، مانند انسانها نیست که قادر باشه کنترلهای نامنظمی اعمال کنه! این برنامه ها، پروسس ها و نحوه استفاده از سخت افزار هست که باعث میشند به نظر برسه پردازنده ها در حلقه های نامنظم یا بی نهایت افتادند. حتی اگر چنین اتفاقی افتاده باشه شما مطلب قابل عرضه ای بالاخره ارائه ندادید!!! نمیدونم شما چه تجربه ای تو اتوماسیون صنعتی دارید (با فقط یه چیزهایی شنیدید و دارید تکرار می کنید) ولی همونطوریکه نمیدونید! تو سیستمها اتوماسیون صنعتی دست برنامه نویس ها اونقدر باز نیست که اشتباهات فاحشی که ما تو محیط های دیگه برنامه نویسی (مخصوصاً memory leakها و استفاده نادرست از منابع و پردازشگرها و ...) انجام میدیم، مرتکب بشن!
نمی خواد سنی از شما بگذره تا از "دور" خارج بشید، شما هنوز وارد گود نشدین که خارج هم بشید؛ کسی که تو "دور" باشه مطمئناً اینقدر وقت اضافه نداره که بشینه این صحبت های خاله زنکی رو بزنه و ادعاش تا عرش اعلی بره. بنده رو که می بینید دارم با شما یکی به دو میکنم برای اینه که اون "بالاخره روزی میرسه " برای بنده رسیده و از دور خارج شدم و دارم به جونایی مثل شما گوشزد میکنم که تو گود برنامه نویسی چه خبره و تو دنیای واقعی برنامه نویسی به این حرفهای نامستند و بی مرجع و بدون پیاده سازی عملی و ارائه راه حل، 2 قرون هم نمیدن و از اون بدتر شخصیت تون رو هم پیش همه خرد میکنن! پس بهتره تو همین محیط های آکادمیک با شما برخورد بشه تا جلوی چند تا رئیس شکم گنده بی منطق یا بی سوادهای کت شلوار پوشیده که دستشون تو جیب باباهاشونه یا ...
اینم اختتامیه :




اول شرابي دركشي سرمست گردي از خوشي


بي خود شوي آنگه كني آهنگ ما آهنگ ما





زين باده مي خواهي برو اول تنك چون شيشه شو


چون شيشه گشتي برشكن بر سنگ ما بر سنگ ما

tdkhakpur
یک شنبه 28 تیر 1388, 22:41 عصر
سلام




اول شرابي دركشي سرمست گردي از خوشي


بي خود شوي آنگه كني آهنگ ما آهنگ ما


زين باده مي خواهي برو اول تنك چون شيشه شو


چون شيشه گشتي برشكن بر سنگ ما بر سنگ ما





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

vcldeveloper
یک شنبه 28 تیر 1388, 22:57 عصر
این آخرین هشدار است. هر کاربری که بعد از این پست بیخودی کل کل کنه، یا پست بی ربط بزنه، جریمه میشه!

tdkhakpur
دوشنبه 29 تیر 1388, 13:45 عصر
این آخرین هشدار است. هر کاربری که بعد از این پست بیخودی کل کل کنه، یا پست بی ربط بزنه، جریمه میشه!
سلام
ببینید شما از اول ماجرا را بررسی کنید ببینید تقصیر از جانب کدام یک از ما هست آقای saeed نمیدونم چی به جای اینکه به کار های خودش برسه امده و مثل حرف خودش خاله زنکی دنبال ما افتاده و نوشته های ما را بررسی میکند .
ایشان مثل اینکه مشکل روانی دارند من با توجه به کار ها و اشعاری که پی در پی ارسال میکند این را استنباط کردم .باز هم میگویم ارسال پست برای من به معنای حل مشکل هست البته در حد توانایی و سواد خودم همچنان که در داخل بسیاری از پستهایم اصلا نتوانستم به کسی کمک کنم بلکه چیزهایی را هم یاد گرفتیم.
خواهشمند م به بعضی از تازه کارها که غرور تازه کاری در برنامه نویسی باعث میشود چنین توهینهایی به کسانی که نمیشناسند بکنند هشدار بدید نه به کسی که در قبال توهین به او مجبور به پاسخ شده است.
البته من داخل این فروم جز saeed_m_farid کسی دیگر را با این ساختار روحی و روانی تا حالا ندیدم.

ب- تات
دوشنبه 29 تیر 1388, 15:06 عصر
عالي .. عالي
من تبريك ميگم به همه دوستان !!! قبل از اينكه خبر و نحوه موفقيت خود را در رابطه با پست جنجال برانگيزم بگم و تشكر مجدد داشته باشم از دوست گرامي -silver- كه با راهنمائي و مثال مفيدشون و تغيير اندكي در كد ارسالي ايشان توسط بنده جهت حل مشكلم، طبق تذكذات مكرر و بجاي مسئولين محترم اين سايت باستحضار ميرسانم به ازاي هر پست كه شما ايجاد ميكنيد يك ركورد به ديتا بيس سايت اضافه كرده ايد - حال همه استاديد آيا انصافه منابع ذخيره سازي سايت رو براي بيان مسائل غير علمي و off off هدر دهيد؟؟

Diabolic
دوشنبه 29 تیر 1388, 15:09 عصر
نمیخوام دخالت کنم
اما یه کم احترم برای همدیگه قائل بشید

ب- تات
دوشنبه 29 تیر 1388, 15:22 عصر
بله میشود ، شما برای برنامت میتونی یه پیغام بنویسی بعد با یه برنامه ی دیگه هر چند دقیقه پیغامی رو که برای برنامه ی اول نوشتی بهش پست میکنی ، اگه برنامه پاسخی داد یعنی فعال هست و هنگ نکرده ، اگر هم که جوابی از برنامه نگرفتی معلومه برنامه دچار مشکل شده و میتونی دوباره راه اندازیش کنی .

طبق راهنمائي ايشون يه تايمر عادي اما نه از نوع thread داخل برنامه اصلي گذاشتم . يه برنامه فرعي همزمان با برنامه اصلي نيز اجرا ميشود كه بصورت پنهان كارش رو انجام ميده و وظيفش اينه كه پيامي كه توسط تايمر در برنامه اصلي به اون ارسال ميشه رو تحليل كنه.
حالا اگه براي مدت معين مثلا 5 ثانبه از برنامه اصلي پيامي نرسه ، برنامه فرعي از ريشه برنامه اصلي رو endtask ميكنه و مجددا اجرا ميكنه به اين ترتيب ديگه هبچ وقت نياز نيست نگران گير كردن و از كار افتادن فرامين به سخت افزار باشم. جالبه بگم اولين چيزي كه به مجرد قفل شده برنامه اصلي از كار مي افته همون تايمر هست كه در پي اون برنامه فرعي كارش رو انجام ميده - بدون خطا و عذيت.

Felony
دوشنبه 29 تیر 1388, 15:38 عصر
طبق راهنمائي ايشون يه تايمر عادي اما نه از نوع thread داخل برنامه اصلي گذاشتم . يه برنامه فرعي همزمان با برنامه اصلي نيز اجرا ميشود كه بصورت پنهان كارش رو انجام ميده و وظيفش اينه كه پيامي كه توسط تايمر در برنامه اصلي به اون ارسال ميشه رو تحليل كنه.
حالا اگه براي مدت معين مثلا 5 ثانبه از برنامه اصلي پيامي نرسه ، برنامه فرعي از ريشه برنامه اصلي رو endtask ميكنه و مجددا اجرا ميكنه به اين ترتيب ديگه هبچ وقت نياز نيست نگران گير كردن و از كار افتادن فرامين به سخت افزار باشم. جالبه بگم اولين چيزي كه به مجرد قفل شده برنامه اصلي از كار مي افته همون تايمر هست كه در پي اون برنامه فرعي كارش رو انجام ميده - بدون خطا و عذيت.
:چشمک:پس مشکلتون حل شد ، خدارو شکر .
حالا که کار علمی این تاپیک تموم شد ، آقای کشاورز لطفا تاپیک رو قفل کنید تا این وضعیت هم تموم شه .
:لبخندساده:موفق باشید .