PDA

نسخه کامل مشاهده نسخه کامل : یک سوال مبتدی (thread)



mnrhm
23-12-2006, 11:12
باسلام
من یک برنامه دارم که در آن یک thread رو ایجاد می کنم و این ترد یک متد را که در آن یک لوپ است اجرا می کند
درون این لوپ هر بار باید یک پیغام داخل تکست باکس روی فرم نمایش داده شود ولی این طور نمی شود یعنی دسترسی به تکست باکسی که در ترد اصلی برنامه ایجاد شده است امکان ندارد؟؟!
چطور باید این مشکل را حل کنم
مثلا شما یک ترد می سازید که یک لوپ را بی نهایت تکرار می کند و این لوپ باید درون تسکت باکس هر بار عددی را نمایش دهد
در ضمن برای این من این کار را می کنم چون اگر ترد اصلی برنامه را بکار بگیرم چیزی داخل تسکت باکس به صورت لحظه ای نمی بینم و باید لوپ تمام شود تا بتوانم آخرین استرینگ داخل تکست باکس را ببینم برای همین بنده یک ترد دیگر ایجاد کرده ام ولی به این مشکل برخورد کرده ام
ممنون می شوم اگر راهنمایی کنید
با تشکر

someone
23-12-2006, 23:41
سلام.
سوالتون اصلا یه سوال مبتدی نیست.
کسی که سر و کارش با Thread میافته حداقل یه برنامه نویس متوسط هست.
فکر میکنم Category کنترل TextBox شما از نوع value هست.
مثلا یه variable از نوع string برای TextBox انتخاب کردید.
برای اینکه هر بار بعد از تغییر مقدار این variable بتونید اون رو نمایش بدید باید از UpdateData استفاده کنید.
ولی استفاده از این متود در یک Thread به اصطلاح unsafe و میشه گفت خطرناک هست.

من دو پیشنهاد برای شما دارم.

1- از متود SetDlgItemText استفاده کنید. یک pointer از DlgClass ایجاد کنید و توسط این اشاره گر
از این متود استفاده کنید. (ThreadFunc یه تابع static هست و نمتونید به طور مستقیم از اعضای public
کلاس در اون استفاده کنید.)
مثلا به این شکل :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ID کنترل TextBox این عبارت انتخاب شده : IDC_THREAD

2- Category کنترل TextBox رو control انتخاب کنید. و از تابع SetWindowTest استفاده کنید.
به شکل زیر :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

m_th از نوع کنترل (از کلاس CEdit) انتخاب شده.
اگه مشکلی پیش اومد اطلاع بدید.
ممنون.

mnrhm
24-12-2006, 11:00
با تشکر اگر می شود یک مثال کامل که یک ترد دیگر در یک لوپ داخل تکست باکس هر بار عددی را می نویسد با سی شارپ بزنید و اگر امکان دارد سرس آن را در سایت قرار دهید
در ضمن در یک لوپ شما اگر ازمتد آپدیت تکست باکس استفاده کنید درست است که هر بار نمایش می دهد ولی مشکل اصلی اینجاست که شما نمی توانید فرم را تکان دهید و یا اگر بر روی فرم دیگری کلیک کنید و دوباره به فرم بر گردید صفحه فرم سفید می شود و مشکل من هم دقیقا همین است

someone
24-12-2006, 19:14
دوباره سلام.
همونطور که گفتم استفاده از UpdateData در یک Threadدرست نیست.( unsafe & dangerous code )
البته این مورد در ++VC هست چون در #C این تابع هر با بعد اجرای Text. اجرا میشه و نیازی به Update کردن
کنترل مورد نظر نیست. در مورد متود هایی که صحبت کردیم بر میگرده به MFC . چون نگفته بودید که از چه زبانی
استفاده میکنید.
NotResponding شدن برنامتون ممکنه به دلیل Thread Priority ی باشه که برای برنامه انتخاب کردید.
در #C میتونید از Threading Namespace و Thread Class استفاده و برای priority میتونید از Thread.Sleep
استفاده کنید.
یه نمونه براتون میذارم اگه مشکلی بود اطلاع بدید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

counter اسم کنترل TextBox هست.
ممنون.

mnrhm
27-12-2006, 09:28
someone عزیز سلام
خسته نابشید مشکلم رو حل کردیدببخشید که یکم دیر شد
واقعا با وجود انسان هایی مثل شما آدم امید وار میشه انسان هایی که به دیگران کمک می رسانند
خدا خیرتون بده ان شاء الله که دایما در حال پیشرفت و در راه موفقیت باشید
خدا نگهدارتون باشه

mnrhm
27-12-2006, 09:35
someone عزیز سلام
خسته نابشید مشکلم رو حل کردیدببخشید که یکم دیر شد
واقعا با وجود انسان هایی مثل شما آدم امید وار میشه انسان هایی که به دیگران کمک می رسانند
خدا خیرتون بده ان شاء الله که دایما در حال پیشرفت و در راه موفقیت باشید
خدا نگهدارتون باشه