PDA

View Full Version : راهنمایی در مورد thread



Mahdi_S_T
چهارشنبه 24 فروردین 1390, 08:41 صبح
من یک thread دارم که در آن حلقه ای وجود داره و یک جدول را پردازش میکنه و در ضمن همزمان در حلقه با یک ocx هم کار میکنه و اطلاعات در حال پردازش در dbgrid روی فرم نمایش داده میشه ، اما در اجرا ، بعضی مواقع درست کار میکنه و بعضی مواقع خطای مثل handle یا خطای حافظه میده ، میشه راهنمایی نمایید چطور مشکل را برطرف کنم (درضمن من تاپیک های قبلی مربوط به thread را هم مطالعه کردم)

tdkhakpur
چهارشنبه 24 فروردین 1390, 09:26 صبح
یک thread دارم که در آن حلقه ای وجود داره و یک جدول را پردازش میکنه و در ضمن همزمان در حلقه با یک ocx هم کار میکنه و اطلاعات در حال پردازش در dbgrid روی فرم نمایش داده میشه ، اما در اجرا ، بعضی مواقع درست کار میکنه و بعضی مواقع خطای مثل handle یا خطای حافظه میده

مشکل از کدتان و یا میتونه از ocx باشه در ضمن اگر ترد دارای هندلی برای signal نداشته باشه به گمانم مشکل از ترد نیست.

Mahdi_S_T
چهارشنبه 24 فروردین 1390, 09:55 صبح
نه کد مشکلی ندارد چون ساختار کلی thread را رعایت کردم ( برای یک مثال ساده بدون پردازش جدول و ocx به درستی کار میکنه ) ، thread هم هندلی نداره !
آیا مشکل از کار کردن بر روی جدول در داخل thread نیست و thread با پردازش جدول در درون خودش مشکلی نداره ؟
در ضمن من از ocx کامپوننت Kylixsms استفاده کردم.

Felony
چهارشنبه 24 فروردین 1390, 10:21 صبح
احتمال خراب بودن OCX هست ولی باز هم نمیشه اینطور نظر داد ، ممکنه در کدتون عملیات سنگینی انجام میدید که باعث سرریز شدن Stack میشه یا ... ؛ بهتره یک نمونه برنامه که این مشکل رو داره قرار بدید .

vcldeveloper
چهارشنبه 24 فروردین 1390, 13:16 عصر
من یک thread دارم که در آن حلقه ای وجود داره و یک جدول را پردازش میکنه و در ضمن همزمان در حلقه با یک ocx هم کار میکنه و اطلاعات در حال پردازش در dbgrid روی فرم نمایش داده میشه
1- وقتی OCX استفاده شده، یعنی از COM استفاده شده، وقتی از COM در Thread ایی استفاده میشه، COM باید برای اون Thread مقداردهی اولیه بشه؛ پس باید ConInitialize و CoUninitialize فراخوانی بشند، که چگونگی انجام کار بارها در تاپیک های دیگه توضیح داده شده.

2- Thread نباید اشیاء گرافیکی رابط کاربر رو تغییر بده، و این کار باید توسط Thread اصلی انجام بشه.



بعضی مواقع درست کار میکنه و بعضی مواقع خطای مثل handle یا خطای حافظه میده
یا موارد فوق رو رعایت نکردید، یا اینکه در ظاهرا رعایت کردید، اما در عمل در کدنویسی اشتباه کردید.