PDA

View Full Version : مشکل indy Thread با دستور ShowMessage



h_mohamadi
چهارشنبه 07 آبان 1393, 09:58 صبح
سلام
من از indy Thread استفاده می کنم و در آخر indy Thread یک ShowMessage را انجام می دهم ولی پیغام من درست نمایش داده نمی شود.یا خیلی برزگ است یا فونتش ناخواناست و یا خیلی کوچک است مه دکمه ok ان دیده نمی شود.
ممنون می شوم راهنمایی بفرمائید

Mask
چهارشنبه 07 آبان 1393, 17:38 عصر
علت این مشکل این هست که پیغام شما در تردی غیر از MainThread فراخوانی میشود.
کار با عوامل UI برنامه وظیفه MainThread هست.
برای رفع این مشکل باید در زمان نیاز به پیغام ، با روالی که در MainThread تعریف شده Synchronize بشید .
عملیات Synchronizeition شامل متد هماهنگ سازی بین تردهاست .
دو روش از عمومی ترین روشها :
1-Synchronize مستقیم با روالها
2- نوشتن مسیج هندلر در مین ترد و ارسال مسیج از ترد جانبی و اجرای روال مورد نظر.
برای هر دو روش در سایت نمونه های زیادی موجود هست.
http://barnamenevis.org/showthread.php?132006-Synchronize-%DA%A9%D8%B1%D8%AF%D9%86-Thread-%D9%87%D8%A7&p=635590&viewfull=1#post635590
http://barnamenevis.org/showthread.php?332666-%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D8%B1%D9%88%D8%B4-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%DA%86%D9%86%D8%AF-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A8%D8%A7-%D9%87%D9%85-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D8%B4%D8%A8%DA%A9%D9%87&p=1465205&viewfull=1#post1465205

http://barnamenevis.org/showthread.php?266313-ShowMessage-%D8%AF%D8%B1-%DB%8C%DA%A9-%D8%AA%D8%B1%D8%AF-%D8%AC%D8%AF%D8%A7&p=1178435&viewfull=1#post1178435
و...

h_mohamadi
پنج شنبه 08 آبان 1393, 09:28 صبح
علت این مشکل این هست که پیغام شما در تردی غیر از MainThread فراخوانی میشود.
کار با عوامل UI برنامه وظیفه MainThread هست.
برای رفع این مشکل باید در زمان نیاز به پیغام ، با روالی که در MainThread تعریف شده Synchronize بشید .
عملیات Synchronizeition شامل متد هماهنگ سازی بین تردهاست .
دو روش از عمومی ترین روشها :
1-Synchronize مستقیم با روالها
2- نوشتن مسیج هندلر در مین ترد و ارسال مسیج از ترد جانبی و اجرای روال مورد نظر.
برای هر دو روش در سایت نمونه های زیادی موجود هست.
http://barnamenevis.org/showthread.php?132006-Synchronize-%DA%A9%D8%B1%D8%AF%D9%86-Thread-%D9%87%D8%A7&p=635590&viewfull=1#post635590
http://barnamenevis.org/showthread.php?332666-%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D8%B1%D9%88%D8%B4-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%DA%86%D9%86%D8%AF-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A8%D8%A7-%D9%87%D9%85-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D8%B4%D8%A8%DA%A9%D9%87&p=1465205&viewfull=1#post1465205

http://barnamenevis.org/showthread.php?266313-ShowMessage-%D8%AF%D8%B1-%DB%8C%DA%A9-%D8%AA%D8%B1%D8%AF-%D8%AC%D8%AF%D8%A7&p=1178435&viewfull=1#post1178435
و...

ممنونم ولی من برای استفاده از ترد ایندی به این صورت دستور نوشته ام
procedure Tmin_f.Thread1Run(Sender: TIdCustomThreadComponent);
begin
Thread1.Active:=False;
if FileExists(dir+'\1.dll') then
begin
Thread1.Terminate;
if fileexist('2.dll')=True then
begin
ShowMessage('فايل يافت شد');
end
else
begin
ShowMessage('فايل يافت نشده است..');
end;

end
else
ShowMessage('فايلي نيست');
end;



می خواستم ببینم درست است یا نه ؟؟
و ترد را avtive:=ture می کنم زمانی که نیاز دارم
این دستور Synchronizeition هم عمل نمی کند؟

*جیگرم*
جمعه 09 آبان 1393, 03:34 صبح
شما مجاز به استفاده از توابعی که با اینترفیس ترد اصلی درگیر است ، بدون استفاده از توابع سینک نیستید.
بهتره که از پیام برای این کار استفاده کنید.postmessage یا sendmessage به ترد اصلی، و وظیفه نمایش پیامها رو به ترد اصلی بسپارید

h_mohamadi
شنبه 10 آبان 1393, 15:25 عصر
شما مجاز به استفاده از توابعی که با اینترفیس ترد اصلی درگیر است ، بدون استفاده از توابع سینک نیستید.
بهتره که از پیام برای این کار استفاده کنید.postmessage یا sendmessage به ترد اصلی، و وظیفه نمایش پیامها رو به ترد اصلی بسپارید
ممنونم ولی من همین یک ترد را دارم و تا به خال از دستورات سینک استفاده نکرده ام می شود یکم بیشتر راهنمایی کنید؟؟
من یک ترد دارم و یک تایمر زمانی مه نیاز دارم تایمر ترد را فعال و ترد ابتدا تایمر را غیر فعال و به مار خود ادامه داده و در آخر تایمر را فعال می کند.
ممنون می شوم راهنمایی بفرمائید؟؟؟