PDA

View Full Version : سوال: کار کردن 2 حلقه به صورت همزمان



123qwe
جمعه 28 مرداد 1390, 16:18 عصر
سلام دوستان امیدوارم حالتون خوب باشه
سوال من اینه که چطور میشه در یک فرم 2تا کلید گذاشت و برای هر کلید یک حلقه while تعریف کرد که یک سری اعداد را از داخل فایل بخونن، و با زدن هر 2 کلید این حلقه ها با هم کار کنند؟

نوجه داشته باشید ما 2 فایل 2 کلید و 2 حلقه while داریم که میخوایم با هم کار کنن

اشتباه نکنید ساده نیست خودتون امتحان کنید میبینید که یکی ار حلقه ها متوقف میشه!

ممنون میشم اساتید کمک کنن
با تشکر

IamOverlord
جمعه 28 مرداد 1390, 16:35 عصر
سلام،
کد کلید اولی رو برای Timer1 بنویسید، کد کلید دومی رو برای Timer2. بعد برای کلید ها کد فعال شدن Timer ها رو بذارید. این طوری دو تا Timer می تونن با هم کار کنن.

setroyd
جمعه 28 مرداد 1390, 16:38 عصر
بله باید بشه مگه میشه نشه !!! vb میاد کدهارو خط به خط از بالا به سمت پایین میخونه نمیشه چند کد رو به صورت هم زمان اجرا کرد البته چند ریسمانی هم در vb هست Multithreading کتاب pdf اون رو با یه سرچ پیدا کنی

setroyd
جمعه 28 مرداد 1390, 16:48 عصر
سلام،
کد کلید اولی رو برای Timer1 بنویسید، کد کلید دومی رو برای Timer2. بعد برای کلید ها کد فعال شدن Timer ها رو بذارید. این طوری دو تا Timer می تونن با هم کار کنن.


Private Sub Command1_Click()
Timer1.Enabled = True
Timer2.Enabled = True
End Sub

Private Sub Timer1_Timer()
For a = 1 To 1000000
DoEvents
Text1.Text = a
Next
End Sub

Private Sub Timer2_Timer()
For a = 1 To 1000000
DoEvents
Text2.Text = a
Next
End Sub
این کد امکانش 0 که کار کنه 1 بازم تاکید میکنم vb در حالت معمولی Multithreading نیست و این کار نشدنیه

شما باید با api این کارو کنی و این امکانو به برنامت بدی که در کتابی که گفتم هست این کتاب رو دانلود کنید و مطالعه کنید چگونگیه پیاده سازی چند ریسمانی رو در vb یاد داده موفق باشید

IamOverlord
جمعه 28 مرداد 1390, 17:24 عصر
همون طور که دوست خوبمون Setroyd می گن بهترین کار اینه که MultiThreading رو یاد بگیری. ولی در راهی که پیشنهاد دادم منظورم کد بالایی نبود؛ منظورم این کدیه که در زیر نوشتم و خوبیش اینه که خلاصه تره برای انجام این کار، اما باید توجه کنی که حلقه ی For حذف شده و به جاش Timer اومده وسط.

1. 2 تا TextBox بذار روی Form.
2. 2 تا CommandButton برای هر کدوم بذار.
3. 2 تا Timer هم برای هر کدوم بذار.
4. بدون این که نامشون رو تغییر بدی، این کد رو بنویس :

Private Sub Command1_Click()
Timer1.Enabled = CBool(-CInt(Timer1.Enabled) - 1)
End Sub

Private Sub Command2_Click()
Timer2.Enabled = CBool(-CInt(Timer2.Enabled) - 1)
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
Timer2.Enabled = False
Timer1.Interval = 1
Timer2.Interval = 1
Text1.Text = 0
Text2.Text = 0
End Sub

Private Sub Timer1_Timer()
Text1.Text = Val(Text1.Text) + 1
End Sub

Private Sub Timer2_Timer()
Text2.Text = Val(Text2.Text) + 1
End Sub


حالا شمارش در هر کدوم از دو TextBox رو می تونی با CommandButton مربوطه شون، شروع یا متوقف کنی.

محسن واژدی
جمعه 28 مرداد 1390, 17:46 عصر
سلام دوستان امیدوارم حالتون خوب باشه
سوال من اینه که چطور میشه در یک فرم 2تا کلید گذاشت و برای هر کلید یک حلقه while تعریف کرد که یک سری اعداد را از داخل فایل بخونن، و با زدن هر 2 کلید این حلقه ها با هم کار کنند؟

نوجه داشته باشید ما 2 فایل 2 کلید و 2 حلقه while داریم که میخوایم با هم کار کنن

اشتباه نکنید ساده نیست خودتون امتحان کنید میبینید که یکی ار حلقه ها متوقف میشه!

ممنون میشم اساتید کمک کنن
با تشکر
سلام علیکم
بله اصولا" نمیتوانید دو حلقه را بصورت همزمان اجرا کرد مگر آنکه یکی پایان یافته و دومی اجرا شود، اما همانگونه که دوستان هم گفتند اگر مصمم به استفاده از حلقه هستید بایستی این عمل را با multithreading انجام دهید، که نیازمند آموزش های لازمه در این زمینه است، البته آموزش نوشتن برنامه های چند نخی در تالار موجود است، که میتوانید با جستجو در مباحث انجمن بیابید
راه ساده تر هم همانگونه که جناب IamOverlord (http://barnamenevis.org/member.php?u=72921) گفتند استفاده از تایمراست،اگرچه سرعتی پایین تر را نسبت به حلقه دارد اما ساده تر است

موفق باشید

123qwe
جمعه 28 مرداد 1390, 18:11 عصر
از همه دوستان ممنونم بابت پاسخهاشون
لطف کردید ممنون از راهنماییتون

123qwe
جمعه 28 مرداد 1390, 18:25 عصر
دوستان میتونید یه کد نمونه بدید که 2 فایل TXT را به صورت همزمان بخونه؟

IamOverlord
جمعه 28 مرداد 1390, 18:42 عصر
دوستان میتونید یه کد نمونه بدید که 2 فایل TXT را به صورت همزمان بخونه؟

سلام دوست عزیز،
دقیقا می خواید چی کار کنید؟ خوب شما در حالت عادی هم می تونید 2 تا فایل txt. رو هم زمان برای خوندن باز کنید.

123qwe
جمعه 28 مرداد 1390, 18:54 عصر
سلام دوست عزیز،
دقیقا می خواید چی کار کنید؟ خوب شما در حالت عادی هم می تونید 2 تا فایل txt. رو هم زمان برای خوندن باز کنید.

میدونم میشه اما میخوام با 2 کلید انجام بشه
2 فایل به صورت همزمان داده هاشون باید استخراج بشه و پردازش بشه
برای یک پروژه دانشجویی هست
اگه فقط نمونه خواندن همزمان با 2 کلید را بهم بدید بقیه کاراشو میتونم انجام بدم
ممنون دوست عزیز

returnx
شنبه 29 مرداد 1390, 12:02 عصر
با VB6 خیلی به MultiThread امیدوار نباشید ، چون اولا این خاصیت بطور معمول تو VB6 وجو نداره و شما باید با توابع API پیاده سازی کنید که کمی مشکل هست...
در ضمن اصولا ویندوز در این حالت اگه درست برنامتون رو پیاده نکنید (خیلی ، خیلی درست) ، ویندوز در آدرس دهی رم دچار مشکل میشه و بعد برنامتون Crash میشه...
من بهتون توصیه میکنم برای MultiThread از Vb.net استفاده کنید که اونجا با کلاس threading خیلی راحت میتونید این کار رو پیاده کنید...

setroyd
شنبه 29 مرداد 1390, 12:25 عصر
چرا همش گیر دادی به دو کلید !!!!!!!!!!!!!! بازم میگم مثلا اگه یه فایل text شما 100000 رکورد داشته باشه و زیاد باشه موقع لود کردن میبینی اول یکی لود میشه و بعدش اون یکی در واقع این هم به ترتیب هست !