PDA

View Full Version : استفاده از متغیر مشترک بین دو برنامه مستقل



Panje Tala
سه شنبه 01 اردیبهشت 1383, 08:53 صبح
با سلام
فرض کنید دو برنامه در دلفی نوشته اید که می خواهید برخی از متغیرهای یک برنامه بصورت پارامتر در برنامه دیگر بکار رود.این دو برنامه کاملا مستقل از هم بوده و فقط از طریق این متغیرها با هم ارتباط برقرار کند.البته یک راه حل استفاده از فایل مشترک و یا بانک اطلاعاتی مشترک و یا رجیستری است. ولی این راه منطقی و کارایی نیست. می خواهم ارتباط دو برنامه از طریق حافظه اصلی و بدون استفاده از حافظه جانبی مثل هارد باشد.
با تشکر. :flower:

سه شنبه 01 اردیبهشت 1383, 11:29 صبح
این روش یکم من در آوردیه :mrgreen:
به میسج از نوع user defined تعیریف کن بعد مقادیری رو که میخای به صورت lparam ,wparam با استفاده از هندل پنجره این برنامه ها برای هم دیگه پاس کن یعنی هروقت خاستی به اون برنامه پارامتر بفرستی به اون برنامه یه میسج بفرست!
این روش به عقل شیطان رجیم هم نمیرسه :twisted:
راستی.
میتونی متغیری رو که میخای واسه اون برنامه بفرستی رو میتونی آخر فایل exe همون برنامه بنویسی اون برنامه هم از آخر exe خودش اونو بخونه :گیج:

Panje Tala
چهارشنبه 02 اردیبهشت 1383, 13:42 عصر
باسلام
میلاد عزیز با تشکر از راهنمایی شما.

به میسج از نوع user defined تعیریف کن بعد مقادیری رو که میخای به صورت lparam ,wparam با استفاده از هندل پنجره این برنامه ها برای هم دیگه پاس کن یعنی هروقت خاستی به اون برنامه پارامتر بفرستی به اون برنامه یه میسج بفرست!

چطوری می تونم یک message از نوع user defined بنویسم.لطفا اگه امکان داره کد کامل ارسال و دریافت متغیر بین دو برنامه رو با همین روش که گفتی برام بنویس تا مطلب برام جا بیفته.
با بررسی هایی که رو جوابت کردم مثل اینکه این یک راه روتین در API ویندوز هست.

بازم از جوابت ممنون. :kiss:

amirrf
چهارشنبه 02 اردیبهشت 1383, 14:46 عصر
فرض کنید دو برنامه در دلفی نوشته اید که می خواهید برخی از متغیرهای یک برنامه بصورت پارامتر در برنامه دیگر بکار رود.این دو برنامه کاملا مستقل از هم بوده و فقط از طریق این متغیرها با هم ارتباط برقرار کند.البته یک راه حل استفاده از فایل مشترک و یا بانک اطلاعاتی مشترک و یا رجیستری است. ولی این راه منطقی و کارایی نیست. می خواهم ارتباط دو برنامه از طریق حافظه اصلی و بدون استفاده از حافظه جانبی مثل هارد باشد.
اگر مقدار پارامترها ساده است، در هنگام فراخوانی فایل اجرایی مقدار متغیرها را به عنوان پارامتر به آن داده و در برنامه دوم از طریق ParamStr آنها را بخوانید.

JavanSoft
چهارشنبه 02 اردیبهشت 1383, 15:04 عصر
ضمن عرض ادب فراوان به آقای AmirFعزیز


در هنگام فراخوانی فایل اجرایی مقدار متغیرها را به عنوان پارامتر به آن داده و در برنامه دوم از طریق ParamStr آنها را بخوانید.
این در صورتی صادق است که شما برنامه دوم را در برنامه اول صدا بزنید
اما
برخی از متغیرهای یک برنامه بصورت پارامتر در برنامه دیگر بکار رود
فکر می کنم به معنای اجرا شدن حتی همزمان 2 برنامه بصورت منفک است که در برنامه دوم تاثیر گذار می باشد

مهدی کرامتی
چهارشنبه 02 اردیبهشت 1383, 16:41 عصر
فکر کنم Atom‌ ها را در ویندوز برای همین کار در نظر گرفته اند.

Panje Tala
پنج شنبه 03 اردیبهشت 1383, 08:32 صبح
با سلام خدمت دوستان برنامه نویس
ببینید مشکل من از اینجا شروع شد که در یک برنامه از یکی از فرمانهای ICMP استفاده کردم زمانیکه سیستم نسبت به ارسال پکیت ICMP اقدام می کند برای یک لحظه هیچ یک از کنترلهای روی فرم به event ها پاسخ نمی دهد بعنوان مثال وقتی رو یک منو کلیک می کنی منو باز نمی شود چون سیستم درگیر فرمان ICMP می باشد.متوجه شدم اگر برنامه اجرایی دو قسمت شود و یک قسمت فرمان ICMP را اجرا کند و برنامه مستقل دیگر منوها و کنترل های دیگر را در بر داشته باشد هر دو بصورت نرمال کار می کنند وتاخیر اجرای فرمان ICMP بر روی کنترلهای برنامه تاثیری ندارد.از آنجاییکه پارامترهای فرمان Icmp باید از برنامه مادر تعیین شود و این ارتباط در پریودهای زمانی به تناوب صورت می گیرد. در جستجوی راهی برای ارتباط این دو قسمت برنامه از طریق حافظه اصلی هستم.
با تشکر از آقای Delphi Assistant به عرض می رسانم در مطالعه شخصی به مبحث Atom ها رسیدم ولی چیز زیادی از آن نفهمیدم.اگر ممکن است بیشتر راهنمایی کنید.دوستان اگر تجربه عملی در این رابطه دارند خواهش می کنم لطف کنند و قسمتی از کد خود را در اینجا بیاورند تا استفاده کنیم. :flower:

مهدی کرامتی
پنج شنبه 03 اردیبهشت 1383, 10:22 صبح
خوب اینو از اول بگو.

برای حل مشکل همزمانی اجرای زمان ارسال پکت ICMP با روند اصلی برنامه، از روش Multi-Threading استفاده کن. فقط یادت نره که در انتهای هر بار اجرای Thread دستور Application.ProcessMessages رو اضافه کنی که فرمهای برنامه هنگام انجام پردازشهای وقت‌گیر Freeze نشه.

به این ترتیب لازم نیست برنامه‌ات رو دو قسمت کنی.

برای مبحث Thread ها راهنمای دلفی رو ببین.

Panje Tala
پنج شنبه 03 اردیبهشت 1383, 12:34 عصر
با سلام
Delphi assistant عزیز با راهنمایی عالی شما مشکل بطور کامل حل شد.که از این بابت سپاسگزارم.
با امید سلامتی و بهروزی برای شما و دست اندرکاران این سایت دوست داشتنی :flower:

Rezak
شنبه 15 تیر 1387, 08:06 صبح
سلام
فرض كنيد يك برنامه روي سرور داريم و در كلاينت يك شورتكات از آن ميسازيم و آنرا اجرا ميكنيم، و ميدانيم يك برنامه ديگر روي سرور در حال اجراست،
سوال: چگونه از برنامه اول كه روي مموري كلاينت اجرا شده . مقدار يك متغير را از برنامه دوم (روي سرور)بخوانيم؟

Delphi Coder
شنبه 15 تیر 1387, 09:12 صبح
خوب اینو از اول بگو.

برای حل مشکل همزمانی اجرای زمان ارسال پکت ICMP با روند اصلی برنامه، از روش Multi-Threading استفاده کن. فقط یادت نره که در انتهای هر بار اجرای Thread دستور Application.ProcessMessages رو اضافه کنی که فرمهای برنامه هنگام انجام پردازشهای وقت‌گیر Freeze نشه.

به این ترتیب لازم نیست برنامه‌ات رو دو قسمت کنی.

برای مبحث Thread ها راهنمای دلفی رو ببین.
فراخوانی Application.ProcessMessages از داخل Thread کار دزستی نیست مگر اینکه مطمئن بشیم Thread اصلی برنامه رو Lock کردیم تا ProcessMessages نکنه. به عبارتی این روال ThreadSafe نیست.
تنها کاری که من فکر میکنم لازم هست گذاشتن یه Sleep کوچولو هست برای اینکه CPU Usage برنامه بالا نره.