نقل قول: ترید همیشه در حال اجرا
توی تابع ff یک While بذارید که شرط آن همیشه True باشد.از Thread.Sleep هم میتونید بین هم بار که While میخواد بره از اول تکرار بشه وقفه بندازید.
نقل قول: ترید همیشه در حال اجرا
این کار استاندارد نیست
باید راه حرفه ای تری باشه
با این کار پرفرمنس برنامه میره بالا
نقل قول: ترید همیشه در حال اجرا
شما گفتید استاندارد نیست،من یک نگاه توی stackoverflow انداختم که یکی گفته بود این روشی هست که اصولا استفاده میشه.
لینک :http://stackoverflow.com/questions/1...rmanent-thread
حالا شاید کس دیگه اومد راه بهتر پیشنهاد کرد و منم یادگرفتم
نقل قول: thread همیشه در حال اجرا
سلام.
من یه ارسال و دریافت میل گرافیکی نوشته بودم تو سی شارپ، چون هر لحظه باید منتظر رسیدن داده جدید بود به همین دلیل از while تو thread استفاده کردم.
راه حرفه ای تری سراغ دارم که تو Qt استفاده میشه نه سی شارپ.
اسمش هست: Signal - Slot
کارش اینه که تابع ff رو وصل می کنیم به یه سیگنالی که فرستاده میشه. فقط هر وقت اون سیگنال فرستاده شد تابع ff شما اجرا میشه. بر اساس اون چیزی که تو پست اوّل فرمودید، شما می تونید سیگنال رو وقتی ارسال کنید که داده ای برای تغییر دادن داشته باشید.
فقط ببینید تو سی شارپ معادلش چی میشه.
نقل قول: thread همیشه در حال اجرا
خب شما مجبورین از یه حلقه بینهایت استفاده کنین
حالا اینجا میخواین ثانیه نشون بدین بیاین داخل حلقه اینو بنویسین
Thread.Sleep(1000);
اینطوری هر بار اجرا 1000 میلی ثانیه صبر میکنه بعد میره دوباره ساعتو آپدیت میکنه
نقل قول: thread همیشه در حال اجرا
ممنون فقط این روش استاندارد هست؟
و راه دیگه ای نیست؟
نقل قول: thread همیشه در حال اجرا
نقل قول:
نوشته شده توسط
negar.rafie
ممنون فقط این روش استاندارد هست؟
و راه دیگه ای نیست؟
اگر قراره بصورت پشت سر هم و متناوب مثلا هر ثانیه تکرار بشه،فکر نکنم روش دیگه ای پیدا کنید.همون حلقه While رو بذارید و با Sleep.Timer کارتون رو راه بندازید.
اگر بعد نیاز به تکرار هست اما متناوب نیست،حلقه While رو بذارید ولی میتونید از WaitOne و Set به جای Sleep.Timer استفاده کنید تا بتونید هر زمان که نیاز دارید با یک سیگنال ترد را دوباره به حالت اجرا ببرید.
نقل قول: thread همیشه در حال اجرا
برای مثالی که در پست اول زدید و کارهایی که هر چند ثانیه باید انجام بگیرند، بله بایست توسط تایمر یا ترد هر چند ثانیه متد رو اجرا کنید. البته برای اینکار در ترد نیاز به حلقه و sleep دارید.
اما برای دریافت داده از دیتابیس در صورت تغییر در اطلاعات از SqlDependency میتونید استفاده کنید.
اگر مشخص کنید چه کاری میبایست انجام بشه ، میشه انتخاب بهتری داشت.
نقل قول: thread همیشه در حال اجرا
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
برای مثالی که در پست اول زدید و کارهایی که هر چند ثانیه باید انجام بگیرند، بله بایست توسط تایمر یا ترد هر چند ثانیه متد رو اجرا کنید. البته برای اینکار در ترد نیاز به حلقه و sleep دارید.
اما برای دریافت داده از دیتابیس در صورت تغییر در اطلاعات از SqlDependency میتونید استفاده کنید.
اگر مشخص کنید چه کاری میبایست انجام بشه ، میشه انتخاب بهتری داشت.
فرض کنید میخوایم یه برنامه بنویسیم که میخواد پیامک هایی که به پنل پیامک ارسال میشه را به صورت مداوم دریافت کند؟
یا مثلا چک کند هر وقت کامپیوتر به اینترنت متصل شد یه کاری بکند
و کاریی از این قبیل
حالا ما میخوایم برناممون وقتی اجرا شد مدام چک کنه
و از همه مهم تر شاید برناممون به مدت طولی مثلا یک ماه در حال اجرا بود
چه کار کنیم که برنامه با مشکل مواجه نشه
نقل قول: thread همیشه در حال اجرا
خب برا اين كارها كه نميخواد هر ثانيه يك بار انجام بدي
اولا بايد بگردي ببيني براش ايونت نمبتوني پيدا كني
اگر نبود از اين روش بايد اتفاده مني اونم يه وفقه 10 ثانيه اي بايد بزاري براش
نقل قول: thread همیشه در حال اجرا
اینکه بیایم از Thread.Sleep استفاده کنیم یا تایمری که هر 1 ثانیه اجرا بشه فرقی هم میکنه؟
نقل قول: thread همیشه در حال اجرا
سلام
عزیزم شما باید از کلاس Threading.Timer استفاده کنی:
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
// Create an event to signal the timeout count threshold in the
// timer callback.
AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecker = new StatusChecker(10);
// Create an inferred delegate that invokes methods for the timer.
TimerCallback tcb = statusChecker.CheckStatus;
// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Console.WriteLine("{0} Creating timer.\n",
DateTime.Now.ToString("h:mm:ss.fff"));
Timer stateTimer = new Timer(tcb, autoEvent, 1000, 250);
// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period.\n");
// When autoEvent signals the second time, dispose of
// the timer.
autoEvent.WaitOne(5000, false);
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
}
}
class StatusChecker
{
private int invokeCount;
private int maxCount;
public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
Console.WriteLine("{0} Checking status {1,2}.",
DateTime.Now.ToString("h:mm:ss.fff"),
(++invokeCount).ToString());
if(invokeCount == maxCount)
{
// Reset the counter and signal Main.
invokeCount = 0;
autoEvent.Set();
}
}
}
نقل قول: thread همیشه در حال اجرا
تفاوت thread با Threading.Timer در چیست؟
در چه جایی از Threading.Timer و در چه جایی باید از Threading استفاده کنیم؟
مثلا برای چک کردن مداوم پنل پیامک و مشاهده پیامکهای دریافتی هم باید از این روش استفاده کنیم؟