PDA

View Full Version : اجرا دو کد همزمان در vb6



aleas2
چهارشنبه 31 اردیبهشت 1393, 13:21 عصر
سلام خسته نباشید دوستان تا جایی میدونین vb6 کدهارو بصورت خطی اجرا میکنه ایا راه حل . میانبر است که بطور مثل
دوتا کد بصورت همزمان کرد؟
بطور مثال سورس commad1 و command2 بصورت همزمان اجرا کرد؟

_mojitaba_
چهارشنبه 31 اردیبهشت 1393, 18:47 عصر
خب وقتی رو command اول کلیک میکنید command2 رو صدا بزنید
مثلا کد command1 اینه

print a
call command2_click

اینجوری هم کار command1 انجام میشه هم command2

aleas2
چهارشنبه 31 اردیبهشت 1393, 19:29 عصر
نه عزیز اینجور هم اول print a اجرا میشه بعد call command2_click اجرا میشه

دنبال راه حل هستم هر دوتا خط برنامه
print a
call command2_click
باهم اجرا بشن

miladatashin
چهارشنبه 31 اردیبهشت 1393, 20:35 عصر
سلام خسته نباشید دوستان تا جایی میدونین vb6 کدهارو بصورت خطی اجرا میکنه ایا راه حل . میانبر است که بطور مثل
دوتا کد بصورت همزمان کرد؟
بطور مثال سورس commad1 و command2 بصورت همزمان اجرا کرد؟

برای این کار شما باید از Thread استفاده کنید. اگه Multi-Threading رو سرچ کنید میتونید سمپل های خوبی پیدا کنید

aleas2
جمعه 02 خرداد 1393, 14:54 عصر
من سمپل درستی ندیدم شما یه سمپل ساده دارین؟

vbhamed
شنبه 03 خرداد 1393, 13:17 عصر
سلام
اینم یک نمونه ساده با سه Thread همزمان
فقط یادتون باشه، وقتی تو برنامتون از Thread استفاده می‌کنید، اگر کار اونها تموم نشه و برنامه رو کامل نبندید ویژوال بیسیک هنگ می‌کنه
بهتره فایل exe رو تست كنيد

aleas2
دوشنبه 05 خرداد 1393, 00:41 صبح
ممنون از سورس نمونه

فقط یه سوال این کد برسی کنین ببینین مشکل نداره به نظرتون امکان هنگ کردن یا ایرادی میتونه داشته باشه؟
ایراد منظورم از خطا هنگ کردن

دانلود فایل : 119493

امکان دارد رویداد print2 همزمان اجرا شود باعث ایجاد مشکل بشه؟

یا اینکه بهتر کد


Private Sub print2(i As Integer)

Form1.Text1.Text = i
Form1.List1.AddItem Form1.Text1.Text

End Sub


به


Private Sub print2(i As Integer)
Static chek As Boolean
Do While chek = True
DoEvents
Loop
chek = True
Form1.Text1.Text = i
Form1.List1.AddItem Form1.Text1.Text
chek = False

End Sub
تغییر بدم؟

vbhamed
سه شنبه 06 خرداد 1393, 06:52 صبح
سلام

رویداد print2 که حتما همزمان اتفاق میفته ولی با توجه به برنامه شما چه مشکلی قراره پیش بیاد آخه این رویداد چیز خاصی نداره، یک متغیر رو به لیست اضافه می‌کنه، ضمنا چرا اول ریختید تو تکست باکس بعد لیست ؟

منظور از اجرای همزمان این نیست که وقتی وسط اجرای رویداد print2 هستید یک فراخوانی دیگه بیاد تو کار اون تداخل ایجاد کنه، بلکه مثل این می‌مونه که دو یا چند (به تعداد Thread ها) تابع مختلف با نامهای متفاوت ولی با کد یکسان نوشته باشید و همزمان این چند تابع اجرا بشن و تنها چیزی که ممکنه باعث تداخل بشه اینه که توی این تابع متغیری عمومی یا Static رو تغییر بدین که ازش تو خود محاسبات تابع استفاده شده باشه که در مورد برنامه شما هم همچین چیزی وجود نداره

aleas2
سه شنبه 06 خرداد 1393, 09:39 صبح
سلام نه این برنامه یه شبیه سازی از برنامه اصلی خودم بود که بتونم سوالمو از شما بپرسم

منظور من : به تعداد Thread ها اگر همزمان یک رویداد اجرا بشه دچار مشکل نمیشه برنامه؟که البته بگم هیچ متغییر عمومی یا static وجود نداره
که شما گفتین مشکلی ایجاد نمیکنه درسته؟

و دلیل اینکه اول ریختم داخل text اینه میخواستم اینو بپرسم امکان داره همزمان Thread ها مقدارشونو بریزن تو تکست باعث ایجاد اختلال بشه؟


-------------------------
بی زحمت این نمونه سورس ببینین

لینک دانلود :119598


در ماژول مربوط به Thread از WebBrowser یا Inet1 کنترل هایی که سورس یک سایت میگیرین یا سایت باز میکنن با خطا مواجه میشم راه حل چی؟

vbhamed
چهارشنبه 07 خرداد 1393, 15:24 عصر
سلام

این ضمیمه که همون قبلی بود

اگر از متنی که توی تکست باکس ریختین استفاده ای نمی‌کنید مشکلی پیش نمیاد ولی اگر استفاده میشه مشابه همون متغیر عمومی هست و ممکنه تداخل ایجاد بشه، البته منظور از تداخل ایجاد خطای اجرایی نیست بلکه ممکنه در محاسبات اشتباه پیش بیاد

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

aleas2
چهارشنبه 07 خرداد 1393, 17:33 عصر
سلام شرمنده ضمیمه رو درست کردم :119598

ضمنا" ناگفته نماند فایل ضمینه یه نمونه از قستمی که برنامه اصلی خودم خطا میده هسته
اینم عکس خطا
119599

به تعداد Thread ها کنترل Inet یا Browser استفاده میکنم همینطور برای هر thread از کد زیر جهت دریافت سورس سایت استفاد میکنم بازم خطا بالا رو میدم برای هر thread کنترل و متغییر جدا گانه استفاده میکنم

Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer

Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Const IF_FROM_CACHE = &H1000000
Private Const IF_MAKE_PERSISTENT = &H2000000
Private Const IF_NO_CACHE_WRITE = &H4000000
Private Const BUFFER_LEN = 256

Public Function GetSource(sURL As String) As String
Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
Dim hInternet As Long, hSession As Long, lReturn As Long
hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
If hInternet Then
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sBuffer
Do While lReturn <> 0
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sData + Mid(sBuffer, 1, lReturn)
Loop
End If
iResult = InternetCloseHandle(hInternet)
GetSource = sData
End Function