رفتن به مطلب
  • 0

انجام شدن ساب ها به ترتیب اولویت


arastooms

سوال

سلام به همه عزیزان 
هر چی فکر کردم موضوع تاپیک رو چه طور انتخاب کنم به نتیجه ای نرسیدم 
امید وارم با طرح موضوع بتونم کمکیاز اساتید بگیرم 

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

مشکل اینجاست که میخام دقیقا بعد از انجام این ساب یعنی کنترل مقادیر و فایلها بیاد و اسپلش و ببنده و بره تو برنامه
حالا ممکنه در گوشی های جدید با سرهت بالا و سریع تر انجام بشه که اسپلشدر زمان کمتر از یک دقیقه بسته میشه و میره تو برنامه 
یا ممکنه در گوشی های قدیمی با رم و حافظه سنگین 4 ثانیه زمان بگیره برای کنترل و بعد بره به اکتیویتی اصلی برنامه

در واقع میخام بگم هر وقت این ساب با موفقیت همه کنترل هاش تموم شد برو به اکتیویتی اصلی ( همین )

ممنون میشم راهنمایی بفرمایید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

8 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام

ببنید بنده به وسیله Join  انجام ندادم

به وسیله رویداد ThreadEnded، این رویداد بعد از اتمام کار ترد اجرا میشه.


Sub Globals
	Dim writeText, msg, goActivty As Thread
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("activity_main")
	writeText.Initialise("writeText")
	msg.Initialise("msg")
	goActivty.Initialise("goActivty")
	
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)
	If UserClosed Then
		writeText.Interrupt
		msg.Interrupt
		goActivty.Interrupt
	End If
End Sub

Sub Write
	If File.Exists(File.DirInternal,"arta.txt") = False Then
		File.WriteString(File.DirRootExternal,"arta.txt","DONE")
	End If
End Sub
Sub MessageStart(obj As Object)
	Dim str As String = obj
	Dim p(1) As Object
	p(0) = str
	msg.RunOnGuiThread("MessageHandleUi",p)
End Sub
Sub MessageHandleUi(objj As Object)
	Msgbox(objj,"MSG")
End Sub
Sub GO
	StartActivity(SecondActivity)
	Activity.Finish
End Sub
Sub btnStart_Click
	writeText.Start(Me,"Write",Null)
End Sub
Sub writeText_Ended(endedOK As Boolean, error As String) 'The thread has terminated. If endedOK is False error holds the reason for failure
	Log("WriteText :"&endedOK)
	If endedOK Then 
		Dim s As String
		msg.Start(Me,"MessageStart",Array As String(s))
	End If
End Sub
Sub msg_Ended(endedOK As Boolean, error As String) 'The thread has terminated. If endedOK is False error holds the reason for failure
	Log("MSG :"&endedOK)	
	If endedOK Then goActivty.Start(Me,"GO",Null)
End Sub
Sub goActivty_Ended(endedOK As Boolean, error As String) 'The thread has terminated. If endedOK is False error holds the reason for failure
	Log("goActivity :"&endedOK)	
E

این کد ها رو ببنید، سه تا ترد تعریف کردم، یک ترد یک فایل رو کپی میکنه و متنی داخلش مینویسه

ترد دوم یک MessageBox  چاپ میکنه ( اینجا یک نکتع داره، MessageBox  به ترد اصلی یا Main Thread مربوط میشه و ما باید اینجا از RunOnGuiThread  استفاده کنیم)

ترد سوم هم بعد از اتمام کار ترد دوم که نمایش MessageBox   هستش میره به اکتیوتی دوم.

پروژع رو هم آپلود کردم.

Join Threads.rar

لینک ارسال
به اشتراک گذاری در سایت های دیگر

یک راه ساده به ذهنم رسید .

01 - ساب 1 رو تو استارت اکتیویتی بزار

02 - ساب 1 چک کنه فایل ها وجود داره یا نه اگه نداشت بزاره و ساب 2 اجرا بشه و اگه وجود داشت باز بره ساب 2

03 - تو ساب 2 . اول چک کنه اینترنت وصل یا نه . اگر وصل نبود پیام بده اینترنت وصل نیست و اگر وصل بود شروع به دانلود فایل بکنه 

04 - یک ساب برای اتمام دانلود باید بنویسی که اگر فایل کامل دان شد بره به ساب 3

05 - تو ساب 3 هم که اسپلش هست و بقیه اش هم که بلدی

( از یک کتاب خونه ای برای دانلود استفاده کن که دارای رویداد دانلود _ کامپلیت باشه )

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

همینطوری ی چیز رسید به ذهنم

شما هم امتحان کن فوقش وقتتو تلف کردم

بیا ی سری متغیر تعریف کن

و به همش صفر بده زمان شروع 

بعد بیا هر کنترلی که با موفقیت انجام میشه یکی از متغیرها رو 1 کن

و همینطور بقیش

بعد اخرش ی شرط بزار چک کن ببین همشون 1 شدن بعد شروع اکتیویتی جدید

اینجور برداشت کردم از تاپیکت

اگ اشتباه برداشتم بیشتر توضیح بده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

روشی که دوستمون گفتن هم خوبه.

روشی رو هم که بهتون میگم خودم استفاده نکردم ولی خب شما تست کنید، از ترد استفاده کنید، ترد هارو Join  بدید، یعنی شما بر فرض مثال Thread1  رو اجرا می کنید و میخوایید بعد از اتمام کار Thread1  مثلا Thread2 شروع به کار کنه، اینجا باید از Join  استفاده کنید، یعنی بعد از اتمام کار Therad1 ترد بعدی ما یعنی Therad2  اجرا بشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در هم اکنون، arastooms گفته است :

سلام به همه عزیزان 
هر چی فکر کردم موضوع تاپیک رو چه طور انتخاب کنم به نتیجه ای نرسیدم 
امید وارم با طرح موضوع بتونم کمکیاز اساتید بگیرم 

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

مشکل اینجاست که میخام دقیقا بعد از انجام این ساب یعنی کنترل مقادیر و فایلها بیاد و اسپلش و ببنده و بره تو برنامه
حالا ممکنه در گوشی های جدید با سرهت بالا و سریع تر انجام بشه که اسپلشدر زمان کمتر از یک دقیقه بسته میشه و میره تو برنامه 
یا ممکنه در گوشی های قدیمی با رم و حافظه سنگین 4 ثانیه زمان بگیره برای کنترل و بعد بره به اکتیویتی اصلی برنامه

در واقع میخام بگم هر وقت این ساب با موفقیت همه کنترل هاش تموم شد برو به اکتیویتی اصلی ( همین )

ممنون میشم راهنمایی بفرمایید

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 5 ساعت قبل، softir گفته است :

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

سلام والا سورس رو که نمیتونم بفرستم چون همه سورسو کنترل ها با هم هست و ساب کنترل نیاز داره به همه اکتویتی ها برای کنترل 
ولی میتونیم اینطوری بگیم که یه ساب داریم 
اول باید چک کنه ببینه 5 تا فایل موجوده یا نه 
بعد بیاد 5 تا فایل رو جایگزین اون 5 تا اولی بکنه ( پاک کنه و کپی کنه )
بهد بیاد از هاست یه فایل رو دانلود کنه 

اگه همه اینا انجام شد اسپلش رو ببنده و بره به برنامه 
اگرم نشد که یه تست میده برنامه با مشکلی روبرو است و تمام

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 13 ساعت قبل، میلاد گفته است :

سلام

همینطوری ی چیز رسید به ذهنم

شما هم امتحان کن فوقش وقتتو تلف کردم

بیا ی سری متغیر تعریف کن

و به همش صفر بده زمان شروع 

بعد بیا هر کنترلی که با موفقیت انجام میشه یکی از متغیرها رو 1 کن

و همینطور بقیش

بعد اخرش ی شرط بزار چک کن ببین همشون 1 شدن بعد شروع اکتیویتی جدید

اینجور برداشت کردم از تاپیکت

اگ اشتباه برداشتم بیشتر توضیح بده

سلام این به فکر خودمم هم رسید مهندس 
ولی چون ما زمان فعالیت هامون فرق میکنه به خطا میخوره 
یعنی یکی زود انجام میشه یکی دیر تر  
برای این کار به ذهنم رسید یه تایمر بزارم و هر 200 ثانیه چک کنم همه متغیر ها 1 هست یا نه ؟؟
بعد اگر همه 1 شد بره اکتیوینتی اصلی 

ولی خوب باید یه راه ساده تر و منطقی تری باشه چون به نظر نمیاد این کار منطقی باشه 

یه چیزی شبیه به کتابخونه AriaAsyncTask آقای شاهدی که سابی داره که بعد از تموم شدن دستورات اجرا میشه (( نمی دونم استفاده کردید یا نه ))
 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 11 ساعت قبل، مجید آرتا گفته است :

سلام

روشی که دوستمون گفتن هم خوبه.

روشی رو هم که بهتون میگم خودم استفاده نکردم ولی خب شما تست کنید، از ترد استفاده کنید، ترد هارو Join  بدید، یعنی شما بر فرض مثال Thread1  رو اجرا می کنید و میخوایید بعد از اتمام کار Thread1  مثلا Thread2 شروع به کار کنه، اینجا باید از Join  استفاده کنید، یعنی بعد از اتمام کار Therad1 ترد بعدی ما یعنی Therad2  اجرا بشه.

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

برای مثال فرض میکنیم که  3 تا ساب داریم 
ساب اول باید چک کنه ببینه 4 تا فایل موجود هست یا نه اگر موجود نیست از پوشه برنامه کپی کنه 
وقتی تموم شد 
بره ساب دوم 
که کار ساب دوم اینه که بره از هاست یه فایل txt رو دانلود کنه که وقتی تموم شد و موفقیت آمیز بود 
بره ساب سه که قرار اسپلش رو ببندیم و بریم تو برنامه 

ولی به ترتیب انجام شدن اینها مهم هست 

ممنون میشم از راهنمایی شما

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...