امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
راه حل Multi Threading امن در VB6 ???
نویسنده پیام
CRazYFULL غایب
مدیر بازنشسته
*****

ارسال‌ها: 792
موضوع‌ها: 27
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 1546
( 2836 تشکر در 593 ارسال )
ارسال: #12
RE: راه حل Multi Threading امن در VB6 ???
نقل قول: مجتبی جان شما خودت تاحالا از کامپوننت های .Net تو VB6 استفاده کردی ؟

آره, مشکلی نداره
فقط بايد از قسمت Properties > Compile گزينه register for com interop رو فعال کنی
بعد از کامپايل يه فايل tlb هم کنار کامپوننت ايجاد ميشه که با vb6 بايد اين فايل رو به References پروژه ات اضافه کنی.

آره چه بهتر با يه زبان native انجام بشه اما من به اين دليل گفتم vb.net چون زبان پايه يکی هست
۲۶-آبان-۱۳۹۰, ۰۴:۰۳:۳۱
ارسال‌ها
پاسخ
تشکر شده توسط : 1120
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #13
RE: راه حل Multi Threading امن در VB6 ???
سلام.
شما حتی کامپوننت گرافیکی ( منظور کامپوننتی که روی فرم دیده بشه ) که با .net نوشته شده باشه رو هم میتونی در vb6 استفاده کنی.
فقط همون طور که مجتبی گفت تنظیمات داره. مثلا تو c# تا اون جا که یادمه باید com visibleش رو true میکردیم.

کد مالتی ترد هم که گذاشتم کار میکنه. برای من کرش نمیکنه. برنامه رو کامپایل میکنم یکیشون کرش میکنه.
به هر حال وقتی فایل اولیه کار میکنه پس باید بشه مشکل رو حل کرد.
۲۶-آبان-۱۳۹۰, ۱۳:۲۰:۰۷
ارسال‌ها
پاسخ
تشکر شده توسط : 1120
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #14
RE: راه حل Multi Threading امن در VB6 ???
سلام .

نقل قول: کد مالتی ترد هم که گذاشتم کار میکنه. برای من کرش نمیکنه. برنامه رو کامپایل میکنم یکیشون کرش میکنه.
به هر حال وقتی فایل اولیه کار میکنه پس باید بشه مشکل رو حل کرد.

پیمان جان واسه من کرش کرد ، فکر می کنم باید دور VB6 رو واسه Multi Threading خط بکشیم ، در بهترین حالت بازم درصد ریسک خیلی بالاست !

بهترین راه اینه که یک ActiveX با Delphi یا هر کامپایلر Native دیگه ای نوشته بشه و ازش تو VB6 استفاده کنیم .

نقل قول: آره, مشکلی نداره
فقط بايد از قسمت Properties > Compile گزينه register for com interop رو فعال کنی
بعد از کامپايل يه فايل tlb هم کنار کامپوننت ايجاد ميشه که با vb6 بايد اين فايل رو به References پروژه ات اضافه کنی.

مجتبی جان یه مشکل دارم ، وقتی کلاس رو Build می کنم Dll ساخته شده تو .Net درست کار میکنه ، اما TLB تو VB6 کار نمیکنه (رفرنسش اضافه میشه اما هیچ متود یا... از کلاس قابل دسترس نیست !) .
در ضمن فایل TLB فقط تو پوشه Debug ساخته میشه و تو پوشه Release خبری ازش نیست !

هم با C# تست کردم هم با VB.Net
یه پروژه ساده هم واسه تست ضمیمه کردم .

راستی اگه VB6 هم به سادگی .Net از مولتی ترد و ... پشتیبانی می کرد چفدر خوب می شدRolleyes

کد:
Dim MyThread As New System.Threading.Thread(AddressOf MySub)
MyThread.Start()
MyThread.Abort()
MyThread.Sleep ()
MyThread.Suspend ()
MyThread.Abort ()
MyThread.Join ()


System.Threading.Thread MyThread = new System.Threading.Thread(MySub)
MyThread.Start();
MyThread.Abort();
MyThread.Sleep ();
MyThread.Suspend ();
MyThread.Abort ();
MyThread.Join ();



فایل‌(های) پیوست شده
.zip   TestClass.zip (اندازه: 46.09 KB / تعداد دفعات دریافت: 63)

(آخرین ویرایش در این ارسال: ۲۷-آبان-۱۳۹۰, ۰۵:۱۰:۰۰، توسط 1120.)
۲۷-آبان-۱۳۹۰, ۰۵:۰۶:۱۵
ارسال‌ها
پاسخ
CRazYFULL غایب
مدیر بازنشسته
*****

ارسال‌ها: 792
موضوع‌ها: 27
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 1546
( 2836 تشکر در 593 ارسال )
ارسال: #15
RE: راه حل Multi Threading امن در VB6 ???
يادم رفته بود اين رو هم بگم که تگ ComClass رو هم بايد اضافه کنيد

کد:
<Microsoft.VisualBasic.ComClass()> Public Class Vb9Class1

    Public Sub M(ByVal strA As String)
        MsgBox(strA)
    End Sub

End Class


نقل قول: فایل TLB فقط تو پوشه Debug ساخته میشه و تو پوشه Release خبری ازش نیست !
تو 2008 مشکلی نداره با Rebuild هم امتحان کن

نقل قول: راستی اگه VB6 هم به سادگی .Net از مولتی ترد و ... پشتیبانی می کرد چفدر خوب می شد
از اين ساده تر هم هست

کد:
System.Threading.ThreadPool.QueueUserWorkItem(AddressOf MySub, Nothing)

۲۷-آبان-۱۳۹۰, ۱۵:۰۷:۰۵
ارسال‌ها
پاسخ
تشکر شده توسط : 1120
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #16
RE: راه حل Multi Threading امن در VB6 ???
سلام .
نقل قول: نقل قول :
فایل TLB فقط تو پوشه Debug ساخته میشه و تو پوشه Release خبری ازش نیست !
تو 2008 مشکلی نداره با Rebuild هم امتحان کن

من از VS 2010 استفاده می کنم ، این مشکل همچنان وجود داره .


یه مشکل دیگه هم هست ، من باید یک متود واسه ایجاد ترد بنویسم که نام تابع رو به عنوان ورودی دریافت کنه ، اما مشکل اینجاست که نمیدونم پارامتر ورودی رو چطوری تعریف کنم ، به دو صورت زیر هم نوشتم اما فایده نداره :

کد:
Public Sub CreateNewThread(ByVal procName As System.Threading.ThreadStart)
        Dim MyThread As New System.Threading.Thread(AddressOf procName)
        MyThread.Start()
    End Sub


    Public Sub CreateNewThread(ByVal procName As System.Threading.ParameterizedThreadStart)
        Dim MyThread As New System.Threading.Thread(AddressOf procName)
        MyThread.Start()
    End Sub

procName رو باید از چه نوعی تعریف کنم که تو VB6 نام تابع رو به عنوان ورودی قبول کنه ؟


(آخرین ویرایش در این ارسال: ۲۸-آبان-۱۳۹۰, ۰۴:۰۳:۱۵، توسط 1120.)
۲۸-آبان-۱۳۹۰, ۰۳:۳۷:۱۵
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #17
RE: راه حل Multi Threading امن در VB6 ???
تردها هیچ وقت نام تابع رو به عنوان ورودی دریافت نمیکنن
بلکه ادرس اون تابع رو به عنوان ورودی دریافت میکنن

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۲۹-آبان-۱۳۹۰, ۱۲:۴۲:۲۵
وب سایت ارسال‌ها
پاسخ
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #18
RE: راه حل Multi Threading امن در VB6 ???
سلام .
مبین جان در توابع بالا وقتی آدرس تابع رو میفرستم ، با خطای عدم تطابق نوع (Type Mismatch) مواجه میشم .
دوستان در کد بالا procName رو باید از چه نوعی تعریف کنم که تو VB6 آدرس تابع رو به عنوان ورودی قبول کنه ؟

۳۰-آبان-۱۳۹۰, ۰۴:۰۲:۰۸
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #19
RE: راه حل Multi Threading امن در VB6 ???
ادرس منظورش همون pointer هست که ادرس حافظه هست که یک مقدار عددی 32 بیتی هست
تو vb6 فکر کنم long در نظر میگیرن
فکر کن میخواهی با GetProcAddress ادرس تابع رو بدست بیاری

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۳۰-آبان-۱۳۹۰, ۱۲:۰۱:۳۹
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1120
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #20
RE: راه حل Multi Threading امن در VB6 ???
مبین جان قبلا نوع Long رو امتحان کردم ، تو .Net نوعش همونطور که تو پست قبلیم نوشتم باید System.Threading.ThreadStart باشه ، وقتی نوعش رو Long انتخاب می کنم خطای غیر قابل تبدیل بودن ایجاد میشه .
[تصویر:  an5qjfksb29eitxdkz42.gif]

۰۱-آذر-۱۳۹۰, ۰۵:۴۳:۱۸
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Exclamation Multi Yahoo Login samansoltani 2 3,472 ۲۵-فروردین-۱۳۸۷, ۱۴:۰۶:۲۷
آخرین ارسال: meisambandari
  در خواست یک multi column combo box mehdi0016 2 2,728 ۰۵-خرداد-۱۳۸۶, ۱۲:۵۲:۰۹
آخرین ارسال: areza

پرش به انجمن:


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

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