View Full Version : سرعت سوكت در Qt
behnia_k
چهارشنبه 01 آذر 1391, 14:12 عصر
با سلام
من دو برنامه جداگانه دارم كه براي ارسال اطلاعات بين آنها از QSslSocket استفاده كرده ام براي تست در يك برنامه در يكي از كلاسها كه از QObject ارث برده بود در متتد timerEvent آن كه هر 1 ميلي ثانيه صدا زده ميشود اقدام به نوشتن بافر بزرگي در سوكت ميكنم انتظار دارم در برنامه دوم آن اطلاعات را دريافت كنم ولي مدت زمان زيادي طول ميكشد تا اطلاعات در سوكت ورودي برنامه دوم خوانده شود. روشي جهت سرعت بخشيدن به ارسال اطلاعات از كارت شبكه وجود دارد؟ آيا اين سرعت كم در خواندن اطلاعات نيز وجود دارد؟ چه راه حلي پيشنهاد ميكنيد؟
alamate_aoal
جمعه 03 آذر 1391, 01:42 صبح
سلام
اینجوری نمیشه نظری داد. یه نمونه کد مختصر بذار
behnia_k
دوشنبه 06 آذر 1391, 10:20 صبح
تا تكه كندي قرار دهم امكان دارد به اين سوالهاي من پاسخ دهيد:
آيا بعد از call كردن متد write از كلاس QSslSocket اطلاعات مستقيما به كار شبكه و از آنجا به بيرون ارسال مي شوند(بايد از همين متد استفاده كنيم) و يا اينكه در صفي قرار ميگيرند (صفي مربوط به سيستم عامل يا كيوت) تا بعدا مورد پردازش قرار گيرند.
آيا كارت شبكه پارامترهائي دارد كه بتوان توسط آن سرعت ارسال اطلاعات و يا خواندن (سيگنالهاي آماده بودن ديتا) آنرا سريعتر كرد.
در كيوت سيگنالها در صفي قرار ميگيرند تا پردازش شوند يا اينكه هر سيگنال بهنگام وقوع مورد پردازش قرار ميگيرد.
connect و disconnect كردن سيگنالها زمان زيادي از سيستم ميگيرد؟
متشكرم.
alamate_aoal
سه شنبه 07 آذر 1391, 07:46 صبح
آيا بعد از call كردن متد write از كلاس QSslSocket اطلاعات مستقيما به كار شبكه و از آنجا به بيرون ارسال مي شوند (بايد از همين متد استفاده كنيم) و يا اينكه در صفي قرار ميگيرند (صفي مربوط به سيستم عامل يا كيوت) تا بعدا مورد پردازش قرار گيرند.
این قضیه به سیستم عامل مربوط میشه. نیازی نیست خودت رو درگیر این مسائل کنی. در هر صورت میتونی بافر رو فلاش (bstractSocket::flush) کنی
آيا كارت شبكه پارامترهائي دارد كه بتوان توسط آن سرعت ارسال اطلاعات و يا خواندن (سيگنالهاي آماده بودن ديتا) آنرا سريعتر كرد
.
Control Panel -> Device Manager -> Network Adapters
95663
در كيوت سيگنالها در صفي قرار ميگيرند تا پردازش شوند يا اينكه هر سيگنال بهنگام وقوع مورد پردازش قرار ميگيرد.
بستگی به شرایط داره.
اگه آبجکت ساتع کننده سیگنال در تردی(thread) جدا از ترد دریافت کننده(های) سیگنال باشه سیگنال صف بندی میشه در غیر اینصورت اسلات مربوطه مستقیم فراخوانی میشه. کیوت از شش نوع کانکشن برای ارتباط بین سیگنال و اسلات استفاده میکنه (Qt::ConnectionType را در مستندات سرچ کن). Connection Type تعیین میکنه چه موقع سیگنال ساتع بشه ,میتونی ترتیب ساتع شدن سیگنال ها رو تغییر بدی , کد زیر این کار رو میکنه:
QObject::connect( obj1, SIGNAL(sig1()), obj2, SLOT(sltObj2), Qt::QueuedConnection );
connect و disconnect كردن سيگنالها زمان زيادي از سيستم ميگيرد؟
این مکانیزمی هست که کیوت برای محاوره آبجکت ها بجای استفاده از تکنیک callback ازش بهره می بره, به هر حال اگر قصد استفاده از تمهیدات کیوت رو داری مجبور به استفاده از اون هستی. به زبانی ساده تر آش کشک خاله جانه!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.