امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
هنگ کردن برنامه با وجود thread
نویسنده پیام
mohamadpk آفلاین
در حال پیشرفت
***

ارسال‌ها: 337
موضوع‌ها: 39
تاریخ عضویت: اردیبهشت ۱۳۸۷

تشکرها : 726
( 661 تشکر در 257 ارسال )
ارسال: #1
Shy  هنگ کردن برنامه با وجود thread
اول اینکه سلام فکر کنم بعد 6 ماه تو همین حدود ها. دستم به این مندس هادی برسه یه هندونه می کوبم تو کلش. چون تا الان 3 بار حداقل تو این چند ماه پسوردم رو ریست کردم ولی میل آخری که پسورد جدید توش میاد برام ارسال نمی شد.

اما دوم و مشگل من . داشتم یه برنامه می نوشتم تو c++ biulder 2010 که یه لیست از سایت هارو بدم بهش بد ip های او نا رو برام بر گردونه.یه کلاس thread ساختم به این شکل.

کد:
__fastcall GetIpOfLink::GetIpOfLink(bool CreateSuspended,TListBox &thLst,TListBox &thLstout)
    : TThread(CreateSuspended)
{
Lst=&thLst;
Lstout=&thLstout;
Index=0;
}
//---------------------------------------------------------------------------
void __fastcall GetIpOfLink::Execute()
{
while (Lst->Count>Index){
Synchronize(GreateSubThRead) ;
}
}
//---------------------------------------------------------------------------

void __fastcall GetIpOfLink::GreateSubThRead()
{
    struct hostent *h;
    char bufIp[40];
    String link=Lst->Items->Strings[Index];
        if ((h=gethostbyname(link.t_str())) == NULL)
        {  // get the host info
            //Lstout->AddItem("Not Find",0);
            Index++;
            return;
        }
           sprintf(bufIp,"%s", inet_ntoa(*((struct in_addr *)h->h_addr)));
        //Lstout->Perform(
          Lstout->AddItem(bufIp,0);
        Index++;
}

بعد تو زدن یه دکمه از رو کلاس بالا یه شی ساختم. به این شکل .

کد:
GetIpOfLink *mthread;
mthread=new GetIpOfLink(false,*lstlink,*lstIp);
این lstlink یه tlistbox هست که لینک ها توشه. lstIp هم یه tlistbox هست که ip های پیدا شده توش ذخیره میشه.که یکی یه دونه شی ازشون فرستادم تو کلاس thread .
مسئله اینجاست که آقا ! .وقتی میام و اون شی رو میسازمبرنامه شروع می کنه به پیدا کردن ip ها و ازافه کردن اونها به لیست باکس مقصد. اما تو یه حالت نیمه هنگ میمونه تا کارش تموم بشه. یعنی هر چند ثانیه به پیغام های سیستم توجه می کنه. پیش خودم گفتم خوب بیام یه خط کد زیر رو بهش تو while ازافه کنم.

کد:
Application->ProcessMessages();
اما اینم که ازافه می کنم هم عقلانی نیست چون خوب کار داره تو thread انجام میشه هم اینکه بازم با ازافه شدن این هم باز فرقی نمیکنه.مشگل تو صدا زدن تابع gethostbyname هست فکر کنم .

خلاصه که کار رو تموم می کنه و ip هارو میده بعد از هنگ در میاد.
حالا من به قول شاعر شیرین سخن توش گیر کردم.
کمک کنید مرسی.


وطنم ای عشق همیشگی من ایران زمین

شقایق ها گل میکنن دوباره عاشق میشن...........قصه عشق وطن رو به غنچه هاشون میگن


۰۴-آبان-۱۳۹۰, ۱۹:۰۱:۵۱
ارسال‌ها
پاسخ
mohamadpk آفلاین
در حال پیشرفت
***

ارسال‌ها: 337
موضوع‌ها: 39
تاریخ عضویت: اردیبهشت ۱۳۸۷

تشکرها : 726
( 661 تشکر در 257 ارسال )
ارسال: #2
RE: هنگ کردن برنامه با وجود thread
همون موقع ها که این سوال رو مطرح کردم.جواب رو پیدا کردم ولی خوب وقت نشد تا الان که بتونم در بارش توضیح بدم. مسئله و مشگل این توابع که توابع مادرکتابخانه c هستند این هست که از متغیر های عمومی برای ذخیره داده هاشون استفاده می کنند و زمانی که در چند نخی از این توابع قدیمی استفاده میشه به دلیل همین متغییر های مشترک در استفاده های تعداد بالا از یک تابع داده های فراخوانیه قبل با فراخوانی های بعدی مخلوط یا بهتر بگیم جا گذاری میشه که این دلیل هنگ کردن برنامه در زمان استفاده از توابع قدیمی میشه.

بهتره از توابع جدید تر مثل WSAAsyncGetHostByName() استفاده بشه. همین

وطنم ای عشق همیشگی من ایران زمین

شقایق ها گل میکنن دوباره عاشق میشن...........قصه عشق وطن رو به غنچه هاشون میگن


۱۰-اسفند-۱۳۹۰, ۰۵:۳۹:۱۹
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Exclamation [سوال] الگوریتم‌های همزمان\ thread sara.m12 9 8,121 ۱۸-دى-۱۳۹۱, ۲۳:۰۵:۳۱
آخرین ارسال: shahmohammadi
  [سوال] کمک برای برنامه ای که حالات کل خرد کردن پول رو نشون بده AraOn 1 3,607 ۰۱-اردیبهشت-۱۳۹۱, ۲۳:۵۳:۴۴
آخرین ارسال: AraOn
  برنامه ریستارت کردن کامپیوتر M2soft 3 5,472 ۱۰-دى-۱۳۸۸, ۱۹:۱۳:۴۳
آخرین ارسال: M2soft
  شناسایی وجود Vmware, VirtualPc, VirtualBox , Qemu lord_viper 0 1,777 ۰۴-بهمن-۱۳۸۷, ۱۴:۳۴:۰۴
آخرین ارسال: lord_viper

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS