PDA

View Full Version : سرعت اجرای دستورات



aleas2
یک شنبه 19 دی 1389, 21:59 عصر
سلام خسته نباشید در ویژوال بیسیک میشه سرعت اجرای دستورات رو کم کرد مثلا اگر در vb6 هر دستور یا یه خط کد هر ثانیه یه بار اجرا میشه کاری کنیم هر دوثانیه یه بار اجرا بشه
اخه من برنامه ای که نوشتم فشار زیادی رو برنامه میاره یعنی دستورات سنگینی هستن باید سرعت اجرا کم باشه که هنگ نکنه

mbf5923
یک شنبه 19 دی 1389, 23:38 عصر
منظور شما در مورد اينكه بايد سرعت كم بشه تا هنگ نكنه مفهوم نيست
چون اگه بخواين سرعت اجرا رو بيارين پايين بايد از يكي از روش هاي وقفه انداختن در برنامه استفاده كنيد كه خود اون هم يك دستور مجزا ميشه.
اما وقفه رو ميتونين توسط دستور timer و يا sleep به وجود بيارين

aleas2
دوشنبه 20 دی 1389, 00:19 صبح
خب به نظرتون چکار کنم چون دستوراتم سنگین هستن مثلا مرتب با کدهای سایت ها پشت سرهم سر کار داره چکار کنم که هنگ میکنه چندلحظه صفحه کاملا سفید میشه و نمیشه پنجره رو تکون داد و بعد چند لحظه درست میشه چکار کنم؟
درمورد دستور sleep توضیح میدین؟چه جور بکار میره یه نمونه؟

محسن واژدی
دوشنبه 20 دی 1389, 08:57 صبح
خب به نظرتون چکار کنم چون دستوراتم سنگین هستن مثلا مرطب باکدهای سایت ها پشت سرهم سر کار داره چکار کنم که هنگ میکنه چندلحظه صفحه کاملا سفید میشه و نمیشه پنجره رو تکون داد و بعد چند لحظه درست میشه چکار کنم؟
درمورد دستور sleep توضیح میدین؟چحور بکار میره یه نمونه؟

دستور APIیی Sleep عملیات ایست موقت رو در برنامه ایجاد میکنه به عنوان مثال شما میتوانید 2000 میلی ثانیه در اون وارد کنید تا برنامه به اندازه 2 ثانیه متوقف بشه
اما شما میفرمائید که برنامه تون قفل میکنه و نمیخوایین اینطور بشه و چون این دستور هم اینکار (قفل شدن و ایست موقت برنامه) رو انجام میده برای کار شما مناسب نیست


یه نمونه واسه دستور
Sleep (کافیه یه دکمه ایجاد کنید و دستور زیر رو در فرم کپی کنید):

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
MsgBox "begin"
Sleep 10000
MsgBox "end"
End Sub

mbf5923
دوشنبه 20 دی 1389, 09:48 صبح
دوستمون محسن درست ميگن دستور sleep براي هدف شما كارايي نداره. شما بايد از multi thread (چند ريسماني) استفاده كنيد كه البته من خودم هم در vb6 ازش استفاده نكردم

aleas2
دوشنبه 20 دی 1389, 10:18 صبح
خب میگید چکار کنم؟
mbf5923 (http://barnamenevis.org/member.php?94132-mbf5923) عزیز شما خودتون دستور multi thread (چند ريسماني) نمیدونید چجوری ؟و یه نمونه بذارین اگر نمیدونید کسی که بلده بگه

vbhamed
دوشنبه 20 دی 1389, 18:17 عصر
سلام
بهتره يك برنامه دوم بنويسيد كه وقتي با پارامتر خاصي اجرا ميشه كار خاصي رو انجام بده و بعد از اينكه پاسخ رو از سايت دريافت كرد به روشي برنامه اول رو خبر دارد كنه، مثلا در فايل يا رجيستري چيزي بنويسه و برنامه اول هم دائما اونجا رو چك كنه
اينطوري برنامه اولتون ديگه قفل نميشه

mbf5923
دوشنبه 20 دی 1389, 21:08 عصر
نه بنده هم از اين استفاده نكردم و توي vb6 نميدونم چطور بايد استفاده كرد
روش دوستمون حامد درسته روشي غير استاندارد هست ولي كارآمده

aria1o
سه شنبه 21 دی 1389, 14:21 عصر
سلام دوست عزیز
تکه کد پایین رو نگاه کن،شاید مشکلت حل بشه


Function Wait(How)
r = GetTickCount + How
Do Until r < GetTickCount
DoEvents
Loop
End Function



ElseIf Combo2.Text = "" Then
Combo2.SetFocus
Exit Sub
End If
Form3.Show

Form3.IE.Navigate2 Form2.Combo3.Text
DoEvents
Wait 8000 "وقفه مورد نظر در برنامه"
Do Until Form3.IE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
Set q = Form3.IE.Document
On Error Resume Next

IamOverlord
سه شنبه 21 دی 1389, 14:32 عصر
سلام دوست عزیز،
مگه گذاشتن دستور DoEvents بین خطوط برنامتون مشکل رو حل نمی کنه؟

aleas2
سه شنبه 21 دی 1389, 14:55 عصر
نه DoEvents مشکلمو حل نمیکنه
من برنامه رو چک کردم بیشترین هنگ مربوط به این دستوره

Set rss = CreateObject("msxml2.domdocument")
rss.async = False
rss.Load ("http://www.news110.ir/?feed=rss")
List1.Clear
Me.Refresh
Set myItem = rss.getElementsByTagName("item")

For i = 0 To myItem.length - 1
List1.AddItem myItem(i).getElementsByTagName("link").Item(0).firstChild.nodeValue

Next i

و از چنین کدی با ادرس های متفاوت استفاده کردم و بخاطری که این تابع


rss.Load ("http://www.news110.ir/?feed=rss")
تا جوابشو از اینترنت نگرفته دست بردار نیسته خب چکار کنم این تابع کارشو انجام بده ولی هنگ نکنه؟

vbhamed
چهارشنبه 22 دی 1389, 12:28 عصر
سلام

با توجه به روشي كه استفاده شده فكر مي كنم فقط راهش استفاده از برنامه دوم است

mbf5923
چهارشنبه 22 دی 1389, 12:56 عصر
منم با نظر حامد موافقم
آسانترين راه حل همينه البته اونجوري باز برنامه شما مكث داره ولي هنگ نميكنه
در ضمن اين برنامه شما روي سرعت هاي مختلف اينترنت هم سرعتش فرق ميكنه يعني ممكنه براي يك نفر 10 ثانيه مكث كنه براي يك نفر 1ثانيه

aleas2
چهارشنبه 22 دی 1389, 13:21 عصر
میشه برای این برنامه دوم که میگین یه مثال با کد نویسی بزنین راستش درست متوجه نمیشم هر چند جواب شما روشن هسته ولی بنده متوجه نمیشم

vbhamed
چهارشنبه 22 دی 1389, 14:30 عصر
سلام

اينم يك نمونه
فايل ShowRSS رو اجرا كنيد، با كمك فايل ReadRss لينك اخبار خونده ميشه و در ليست نمايش داده ميشه
بعد از زدن دكمه Show Rss چند ثانيه صبر كنيد تا ليست پر بشه اما برنامه قفل نميشه