ورود

View Full Version : poco in qt



shahin-h
یک شنبه 07 دی 1393, 15:46 عصر
سلام خسته نباشید
من یه مشکل داشتم اونم اینه که من از poco توی qtاستفاده کردم حالا برنامه ی من مربوط به ftpcleintsession هستش برنامم درست کار میکنه اما فرمم تا اتمام کار هنگ هستش چطوری مشکل را برطرف کنم.اینم کد:



try{
QStringIP="ip";
intPort=21;
Poco::Net::FTPClientSessionftp(IP.toStdString(),Po rt);
ftp.login(uu.toStdString(),pp.toStdString());


if(ftp.isLoggedIn()){
ui->listWidget->addItem("Loginned");
createtable(uu,pp);


}
ftp.close();


}
catch(Poco::Exception&ex)
{
std::cerr<<ex.displayText()<<endl;
ui->listWidget->addItem("LoginFaild!");
return-1;;


}

omid_kma
یک شنبه 07 دی 1393, 20:05 عصر
از QThread یا std::thread استفاده کنید و عملیات زمانگیر رو داخل یک thread غیر از gui انجام بدید .

ciph3r
یک شنبه 07 دی 1393, 20:50 عصر
نه آقا امیداشتباه متوجه شدیددر کتابخانه پوکو وقتی که هر تابع تموم میشه آخرش به Exception ختم میشهحالا زمانه که در کیوت از آن استفاده می کنیم کار به درستی انجام میشه ولی تا وقتی که کار برنامه تمام نشه فرم مذکور هنگهحدس ما بر اینه که استفاده از Try catch هست که باعث این میشهاگر هم ازش استفاده نکنیم گیر میده چون این کتابخانه خودش از اکسپشت استفاده می کنهحالا راهی به نظر میرسه که این را حل کرد ؟ راهی هیست که از try catch استفاده نشه ؟یا اینکه اگر استفاده بشه کیون باعث نشه فرم هنگ کنه ؟برنامه بالا در خصوص یک تستر می باشه که یوزر و پسور های زیاده را بر روی FTP تست می کنه که ببینه کدام لاگین میشه

omid_kma
دوشنبه 08 دی 1393, 19:39 عصر
ببینید هر برنامه یک thread اصلی داره که وظیفش نمایش ui هست حالا وقتی که داخل این thread اصلی یک عملیات زمانگیر انجام میدید event loop برنامه که وظیفه دریافت event های سیستم عامل رو داره فرصت اجرا پیدا نمی کنه و برنامه هنگ می کنه . این جا قسمت زمان گیر تابع login هست ربطی به try catch و qt هم نداره .
همون طوری که بالا گفتم راه همونه که یک thread دیگه بسازید که بصورت موازی کار کنه
کل قسمت try catch رو داخل یک thread دیگه انجام بدید(البته قسمت هایی که ui آپدیت میشه رو پاک کنید) و زمان تمام شدن کار یک signal شامل رشته emit کنید ("logined"یا"failed" ) بعد توی mainwindow به یک slot سیگنال رو connect کنید و ui رو آپدیت کنید .
البته بجای این کار میشه از thread خود poco هم استفاده کرد مثال دوم این جا رو ببینید http://pocoproject.org/docs/00100-GuidedTour.html

shahin-h
سه شنبه 09 دی 1393, 16:21 عصر
ببینید هر برنامه یک thread اصلی داره که وظیفش نمایش ui هست حالا وقتی که داخل این thread اصلی یک عملیات زمانگیر انجام میدید event loop برنامه که وظیفه دریافت event های سیستم عامل رو داره فرصت اجرا پیدا نمی کنه و برنامه هنگ می کنه . این جا قسمت زمان گیر تابع login هست ربطی به try catch و qt هم نداره .
همون طوری که بالا گفتم راه همونه که یک thread دیگه بسازید که بصورت موازی کار کنه
کل قسمت try catch رو داخل یک thread دیگه انجام بدید(البته قسمت هایی که ui آپدیت میشه رو پاک کنید) و زمان تمام شدن کار یک signal شامل رشته emit کنید ("logined"یا"failed" ) بعد توی mainwindow به یک slot سیگنال رو connect کنید و ui رو آپدیت کنید .
البته بجای این کار میشه از thread خود poco هم استفاده کرد مثال دوم این جا رو ببینید http://pocoproject.org/docs/00100-GuidedTour.html

ممنون آقا امید
از توضیحاتی که دادین سپاسگزارم
من از لحاظ تئوری متوجه شدم تقریبا ولی نمیدونم چطور تو برنامه نویسیش پیاده سازی کنم :گریه::افسرده:

ممنون میشم که با نمونه کد بیشتر توضیح بدین چون با Thread زیاد کار نکردم