PDA

View Full Version : ارسال پارامتر بین دو پروسه در حال اجرا؟؟؟



RED-C0DE
چهارشنبه 11 مهر 1386, 16:37 عصر
من می خوام بین دو تا پروسه در حال اجرا (که هر دو رو خودم دارم مدیریت می کنم) پارامتر بفرستم و بر اساس این پارامتر کاری رو انجام بدم...
چجوری باید اینکار رو بکنم؟؟؟
ممنون...

omid_Ahmadi
چهارشنبه 11 مهر 1386, 19:04 عصر
به کاری که شما می خواهید انجام بدید IPC یا InterProcess Communication گفته میشه. روشهای زیادی برای انجام این کار (به صورت کلی و یا در محیط .NET) وجود داره که می تونید اونها رو در این قسمت (http://msdn2.microsoft.com/en-us/library/aa365574.aspx) ببینید.

مرسوم ترین روشها برای این کار در حالت کلی استفاده از یک سمافور (http://msdn2.microsoft.com/en-us/library/system.threading.semaphore.aspx) هست. نوع ساده تر و سطح بالاتر سمافور هم، مانیتور هست که در .NET هر دو پشتیبانی میشه.

دقت کنید اگر قرار نیست هیچ Race Condition ای در برنامه پیش بیاد و فقط به یه تبادل اطلاعات ساده نیاز دارید، می تونید به سادگی از Shared Memory استفاده کنید. اما در صورتی که این تبادل اطلاعات قراره در سطح وسیعی انجام بشه، و یا برنامه ها باید با دقت و هماهنگی زیادی با هم کار کنند، بهتره به لینکهایی که دادم رجوع کنید و به فکر استفاده از Shared Memory هم نباشید.

موفق باشید.

hdv212
چهارشنبه 11 مهر 1386, 20:26 عصر
این لینک (http://www.codeproject.com/cs/threads/#Inter%2DProcess+Communication) هم مناسبه.

RED-C0DE
چهارشنبه 11 مهر 1386, 23:53 عصر
ممنون از لینکا...هنوز همشون رو نخوندم...
می شه یک تعریف ساده از سمافور بگین...

omid_Ahmadi
پنج شنبه 12 مهر 1386, 07:16 صبح
برای درک ساده سمافور، به درک مفهوم IPC و Critical Region و Race Condition نیاز داری. در صورتی که این موارد رو بدونی تعریف ساده سمافور میشه:
تکنیکی هست که با استفاده از دو تابع و یک شمارنده، فقط به تعداد مشخص شده از پروسس اجازه می ده که در لحظه وارد Critical Region بشن، برای مثال در سمافور باینری در هر لحظه فقط یک پروسه می تونه وارد CR بشه، به این ترتیب امکان به وجود اومدن Race Condition در هر کدوم از پروسه ها از بین می ره.

alirzn
پنج شنبه 19 مهر 1386, 07:57 صبح
من دو تا برنامه دارم که یکی با delphi هست و یکی با #c که می خوام یک ارتباط بین این دو برنامه ایجاد کنم و یک پارامتری رو ارسال کنم آیا واسه اینم میشه از سمافور استفاده کرد؟



برای درک ساده سمافور، به درک مفهوم IPC و Critical Region و Race Condition نیاز داری. در صورتی که این موارد رو بدونی تعریف ساده سمافور میشه:
تکنیکی هست که با استفاده از دو تابع و یک شمارنده، فقط به تعداد مشخص شده از پروسس اجازه می ده که در لحظه وارد Critical Region بشن، برای مثال در سمافور باینری در هر لحظه فقط یک پروسه می تونه وارد CR بشه، به این ترتیب امکان به وجود اومدن Race Condition در هر کدوم از پروسه ها از بین می ره.

omid_Ahmadi
پنج شنبه 19 مهر 1386, 08:09 صبح
وقتی صحبت از پروسس هست، این مورد که هر کدوم از پروسس ها با چه زبانی نوشته شدن اهمیتی نداره. فقط کامپایلر اون زبان باید از سمافور پشتیبانی کنه. C# و Delphi این کار رو می کنن. پس می تونی برای ارتباطشون از سمافور استفاده کنی.

موفق باشی