PDA

View Full Version : حرفه ای: هماهنگ سازی thread ها



alimooghashang
یک شنبه 25 بهمن 1388, 11:16 صبح
با سلام
من میخوام یه برنامه بنویسم که ، یه پیغام رو از یه پورت TCP بگیره و به یه پورت دیگه بفرسته
برنامه رو نوشتم
ولی میخوام با ترد باشه

با دو تا ترد!
یک نخ که مدام هرچی اومد از پورت اول بخونه ،
و یه نخ که به اطلاعاتی که نخ اول خونده رو بفرسته به پورت دوم

حالا نمیدونم اصلا دوتا نخ نیاز داره یا یه نخ هم کافیه!!!

چطوری میشه این هماهنگی رو ایجاد کرد؟
(سرعت ارسال اطلاعات تو پورت ها هم 2 میلی ثانیه هست)

alimooghashang
چهارشنبه 19 اسفند 1388, 13:15 عصر
کسی نبود راهنمایی کنه؟
هماهنگ سازی ترد رو به چه صورت میشه انجام داد؟
با سمافور میشه این کار رو کرد؟

s_mehdi
چهارشنبه 19 اسفند 1388, 16:19 عصر
سلام
چه کاری که از دود تا thread استفاده کنی!! تا وقتی که اطلاعاتی از پورت اول نگرفتی نمیخواد به پورت دوم بفرستی!
این کار ذاتاً سریاله.

mehdi.mousavi
چهارشنبه 19 اسفند 1388, 17:24 عصر
با سلام من میخوام یه برنامه بنویسم که ، یه پیغام رو از یه پورت TCP بگیره و به یه پورت دیگه بفرسته برنامه رو نوشتم ولی میخوام با ترد باشه با دو تا ترد!
یک نخ که مدام هرچی اومد از پورت اول بخونه ، و یه نخ که به اطلاعاتی که نخ اول خونده رو بفرسته به پورت دوم حالا نمیدونم اصلا دوتا نخ نیاز داره یا یه نخ هم کافیه!!! چطوری میشه این هماهنگی رو ایجاد کرد؟ (سرعت ارسال اطلاعات تو پورت ها هم 2 میلی ثانیه هست)

سلام.
البته که استفاده از دو Thread کاری کاملا صحیح هستش. چون اینطوری، اگر بهر دلیلی، ارسال شما با مشکل مواجه بشه، تاثیری در روند دریافت بسته ها نخواهد داشت. در واقع فرض کنیم مقصد بسته های ارسالی شما، برای مدت محدودی Unreachable بشه. اونوقت، اگر هر دو کار (ارسال و دریافت بسته ها) رو در یک Thread انجام بدید، دریافت بسته ها هم به مشکل بر میخوره و عملا متوقف میشه. بنابراین بدون شک باید اینکار رو در دو Thread انجام داد.

اما اگر من باشم، جای اینکه کد رو در User Mode بنویسم، در Kernel Mode می نویسم، تا دیگه بسته ها به User Mode نیان. اینکار هم فقط با نوشتن Driver میسره (و البته، بزبان C).

در هر حال، برای همزمان کردن دو Thread میتونید از Synchronization Object ها استفاده کنید. عبارت مزبور رو در گوگل جستجو کنید، تا به پاسخ خودتون برسید.

موفق باشید.