PDA

View Full Version : سوال: Thread در vb



mohsen57
یک شنبه 09 تیر 1387, 23:47 عصر
چگونه باید یک thread بسازم و از آن استفاده کنم؟ یک مقاله در سایت دیدم که آموزش داده بود ولی موقع مثال زدن کلاس ساخته بود و کلی کدهای پیچیده نوشته بود که اصلا سر در نیاوردم اگه میشه یه مثال ساده بزنید.

یک مثال عملی ساده هم بزنید کفایت میکنه

mazy12
سه شنبه 11 تیر 1387, 17:42 عصر
این سوال منم هست هیچکس نیست توضیحی بده :(

__H2__
پنج شنبه 13 تیر 1387, 03:00 صبح
سلام
نجام این کار در VB6 با کمک برخی API ها ممکن است ولی به علت ذات STA در VB6 باید به نکات بسیاری دقت کنید.
گمانم در کتاب "VB6 پیشرفته" از "کانون نشر علوم" در این مورد بحث شده بود و بهتر است کتاب را تهیه کنید تا تسلط نسبی بر این امر پیدا کنید.

البته به نظر من که به جای اینکه VB6 پیشرفته بروید بخوانید، بهتر است تا VB2008 بخوانید.
موفق باشید

Javad-2010
سه شنبه 16 آذر 1389, 12:29 عصر
یک مثال عملی ساده هم بزنید کفایت میکنه
اگه کسی لطف کنه و این کار را بکنه خیلی خوبه

محسن شامحمدی
سه شنبه 16 آذر 1389, 20:26 عصر
يادمه يكدفعه بحث سر همين قضيه بود و جناب xxxxx_xxxxx (http://barnamenevis.org/member.php?46030-xxxxx_xxxxx)مي گفت:
من زماني با كلي مشكل اين قضيه رو پياده كردم ولي با يك مشكل كوچك كل برنامه بسته مي شد و كاملا خطرناك بود به همين دليل بي خيالش شدم!!

البته اين عين متن نبود ولي منظور كليشون همين بود.
(http://barnamenevis.org/profile.php?do=addlist&userlist=buddy&u=46030)

حمید محمودی
سه شنبه 16 آذر 1389, 20:57 عصر
سلام،

یادمه قبلا هم در همین بخش از فروم، یه بار با دوستان دیگه در این مورد بحث کردیم. اونجا هم عرض کردم که vb6 کلا با چند نخی مشکل داره. Crash شدن و مشکلات دیگه ای ممکنه برای برنامه شما بوجود بیاد که شخصا هم باهاش برخورد کرده بودم و پیشنهاد میکنم کلا با ویبی 6 اینکار انجام نشه. مخصوصا برای برنامه هایی که برای ذخیره داده ها بکار میره، استفاده از multi-Threading خوب نیست و بهتر است انجام نشه.

در هر حال مطالب زیر برای این منظور فکر کنم خوب باشه :

ftp://ftp.desaware.com/SampleCode/Articles/Thread.zip
http://www.freevbcode.com/ShowCode.asp?ID=1287
http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=24747&lngWId=1
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_10109636.html
http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=31786&lngWId=1
http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=24695&lngWId=1

در این لینک هم سورس های مختلف با این مطلب پیدا میتونید بکنید : اینجا
(http://www.planet-source-code.com/vb/scripts/BrowseCategoryOrSearchResults.asp?lngWId=1&txtCriteria=Multi+thread)

returnx
سه شنبه 16 آذر 1389, 22:09 عصر
این برنامه رو من از روی یکی دو تا مقاله نوشتم کار انجام میشه اما یکم توش خطا داره(بعضی وقتی آدرس دهی رم دچار مشکل میشه) ولی شاید بدردتون بخوره...
http://www.4shared.com/file/6RAwPC7d/Thread.html

xxxxx_xxxxx
چهارشنبه 17 آذر 1389, 01:23 صبح
این برنامه رو من از روی یکی دو تا مقاله نوشتم کار انجام میشه اما یکم توش خطا داره(بعضی وقتی آدرس دهی رم دچار مشکل میشه) ولی شاید بدردتون بخوره...
http://www.4shared.com/file/6RAwPC7d/Thread.html
سلام،
قسمتی از کد شما:


While a <> 20
Print "x"
hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf AsyncThread, ByVal 0&, ByVal 0&, hThreadID)
a = a + 1
s = AsyncThread
Print s
Wend
وقتی با تابع CreateThread، آدرس روال موردنظرتون رو برای اجرا در یک Thread جداگانه ارسال می کنید، دیگه نیازی به فراخوانی مجدد اون نیست. (خط پنجم)
خروجی که شما مشاهده می کنید حاصل Thread ای نیست که ایجاد کردید، بلکه خروجی از اجرای تابع با دستور s = AsyncThread حاصل میشه.
تابع CreateThread خودش به معنی اجرای تابع مورد نظرمون در یک Thread جدید هست.

توی حلقه، 20 تا Thread ایجاد میکنید، و هر کدام برای خودشون اجرا میشن و هیچ کنترلی روی اونها نیست، چون Hnadle شون بعد از یک دور حلقه، از بین میره. البته چون تابع AsyncThread کار زیادی انجام نمیده و فقط خروجی خودشو برابر "y" قرار میده، معمولاً مشکلی در اجرای برنامه به وجود نمیاد.

Javad-2010
چهارشنبه 17 آذر 1389, 15:30 عصر
من وقتی از thread در VB6 استفاده میکنم، در حین اجرا VB6 هنگ میکنه و بسته میشه، به نظر شما مشکل چیه؟ راه حل اون چیه؟

xxxxx_xxxxx
چهارشنبه 17 آذر 1389, 19:17 عصر
من وقتی از thread در VB6 استفاده میکنم، در حین اجرا VB6 هنگ میکنه و بسته میشه، به نظر شما مشکل چیه؟ راه حل اون چیه؟
علت های زیادی میتونه داشته باشه. کد خودتون رو اینجا بزارید تا بررسی شه.

Javad-2010
پنج شنبه 18 آذر 1389, 00:35 صبح
علت های زیادی میتونه داشته باشه. کد خودتون رو اینجا بزارید تا بررسی شه.
برای تست Thread میخواستم دو تا حلقه را همزمان اجراء کنم و از این کدها استفاده کردم:
در Module1 این کدها:

Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Public Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
و در Command1_Click از این کدها:

TerminateThread h1, 0
TerminateThread h2, 0
و دو حلقه مذکور را در Module1 به صورت Public معرفی کردم.