ورود

View Full Version : فریز شدن فرم tidtcpserver در زمانیکه هیچ کاری انجام نمیدهد و antifreeze هم استفاده شده .



MEhdi Sobhani
جمعه 10 دی 1389, 13:27 عصر
با عرض سلام و خسته نباشید
یه برنامه با tidtcpserver و TidTcpClient نوشتم که چت خیلی ساده هست .
روش کار هم اینطوره که سرور هر کلاینتی به کانکت میشه اسم کلاینت رو میگیره و در لیستباکس اضافه میکنه و acontext رو هم زمان کانکت شدن در یک آرایه نگه میداره . در زمان کانکت شده به ازای هر کانشن یک memo هم روی فرمساخته میشه . تا قبل از ساخت این memo هیچ مشکلی نبود اما بعد از ساخت memo صفحه سرور فریز میشه . از Antifreeze هم استفاده کردم .
این کد برنامه هست :
لطفا راهنمایی کنید .
با تشکر فراوان .

Felony
شنبه 11 دی 1389, 13:18 عصر
ربطی به استفاده از AntiFreze نداره ، شما تو کدتون تو رویداد OnConnect یک روال رو صدا زدید که Memo رو روی فرم میسازه و رسم میکنه ، چه انتظاری جز فریز شدن دارید ؟

Indy درخواست ها رو در Thread ها جداگانه از Main Thread برنامه پردازش و اجرا میکنه ، وقتی Memo رو تو رویداد OnConnect میسازید یعنی دارید تو یک Thread غیر از Thread اصلی این کار رو انجام میدید ، در دلفی و در مباحث Multi Threading هیچ Thread ی جزء Main Thread حق دخالت در اجزاء بصری فرم برنامه رو نداره ، اون کار شما باعث نقض این قانون میشه .

باید قسمت ساخت Memo رو به Main Thread برنامه بسپارید ( Synchronize ) ، برنامتون رو اصلاح کردم .

موفق باشید .