نمایش نتایج 1 تا 14 از 14

نام تاپیک: thread همیشه در حال اجرا

  1. #1

    thread همیشه در حال اجرا

    سلام
    من میخوام یه سری اطلاعات را به نرم افزار بدم که این اطلاعات مدام تغییر میکنند
    حالا نمیخوم از تایمر استفاده کنم
    مثلا در کد زیر ثانیه را می خوام مدام با ترید روی فرم نمایش بدم ولی فقط یکبار اجر میشه و متوقف میشه
    حالا باید چکار کنیم تا ترید مدام در حال اجرا باشه تا قبل از اینکه متوقف بشه

     Thread p1;
    private void Form1_Load(object sender, EventArgs e)
    {
    p1 = new Thread(ff);
    p1.Start();
    }
    private void ff()
    {

    this.Invoke(new Action(() =>
    {
    this.Text = DateTime.Now.Second.ToString ();
    }));

    }

  2. #2
    کاربر دائمی آواتار abbas.oveissi
    تاریخ عضویت
    دی 1389
    محل زندگی
    تهران
    پست
    578

    نقل قول: ترید همیشه در حال اجرا

    توی تابع ff یک While بذارید که شرط آن همیشه True باشد.از Thread.Sleep هم میتونید بین هم بار که While میخواد بره از اول تکرار بشه وقفه بندازید.

  3. #3

    نقل قول: ترید همیشه در حال اجرا

    این کار استاندارد نیست
    باید راه حرفه ای تری باشه
    با این کار پرفرمنس برنامه میره بالا

  4. #4
    کاربر دائمی آواتار abbas.oveissi
    تاریخ عضویت
    دی 1389
    محل زندگی
    تهران
    پست
    578

    نقل قول: ترید همیشه در حال اجرا

    شما گفتید استاندارد نیست،من یک نگاه توی stackoverflow انداختم که یکی گفته بود این روشی هست که اصولا استفاده میشه.
    لینک :http://stackoverflow.com/questions/1...rmanent-thread
    حالا شاید کس دیگه اومد راه بهتر پیشنهاد کرد و منم یادگرفتم

  5. #5

    نقل قول: thread همیشه در حال اجرا

    سلام.
    من یه ارسال و دریافت میل گرافیکی نوشته بودم تو سی شارپ، چون هر لحظه باید منتظر رسیدن داده جدید بود به همین دلیل از while تو thread استفاده کردم.
    راه حرفه ای تری سراغ دارم که تو Qt استفاده میشه نه سی شارپ.
    اسمش هست: Signal - Slot
    کارش اینه که تابع ff رو وصل می کنیم به یه سیگنالی که فرستاده میشه. فقط هر وقت اون سیگنال فرستاده شد تابع ff شما اجرا میشه. بر اساس اون چیزی که تو پست اوّل فرمودید، شما می تونید سیگنال رو وقتی ارسال کنید که داده ای برای تغییر دادن داشته باشید.
    فقط ببینید تو سی شارپ معادلش چی میشه.

  6. #6

    نقل قول: thread همیشه در حال اجرا

    خب شما مجبورین از یه حلقه بینهایت استفاده کنین
    حالا اینجا میخواین ثانیه نشون بدین بیاین داخل حلقه اینو بنویسین
    Thread.Sleep(1000);

    اینطوری هر بار اجرا 1000 میلی ثانیه صبر میکنه بعد میره دوباره ساعتو آپدیت میکنه

  7. #7

    نقل قول: thread همیشه در حال اجرا

    ممنون فقط این روش استاندارد هست؟
    و راه دیگه ای نیست؟

  8. #8
    کاربر دائمی آواتار abbas.oveissi
    تاریخ عضویت
    دی 1389
    محل زندگی
    تهران
    پست
    578

    نقل قول: thread همیشه در حال اجرا

    نقل قول نوشته شده توسط negar.rafie مشاهده تاپیک
    ممنون فقط این روش استاندارد هست؟
    و راه دیگه ای نیست؟
    اگر قراره بصورت پشت سر هم و متناوب مثلا هر ثانیه تکرار بشه،فکر نکنم روش دیگه ای پیدا کنید.همون حلقه While رو بذارید و با Sleep.Timer کارتون رو راه بندازید.
    اگر بعد نیاز به تکرار هست اما متناوب نیست،حلقه While رو بذارید ولی میتونید از WaitOne و Set به جای Sleep.Timer استفاده کنید تا بتونید هر زمان که نیاز دارید با یک سیگنال ترد را دوباره به حالت اجرا ببرید.

  9. #9

    نقل قول: thread همیشه در حال اجرا

    برای مثالی که در پست اول زدید و کارهایی که هر چند ثانیه باید انجام بگیرند، بله بایست توسط تایمر یا ترد هر چند ثانیه متد رو اجرا کنید. البته برای اینکار در ترد نیاز به حلقه و sleep دارید.
    اما برای دریافت داده از دیتابیس در صورت تغییر در اطلاعات از SqlDependency میتونید استفاده کنید.
    اگر مشخص کنید چه کاری میبایست انجام بشه ، میشه انتخاب بهتری داشت.

  10. #10

    نقل قول: thread همیشه در حال اجرا

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    برای مثالی که در پست اول زدید و کارهایی که هر چند ثانیه باید انجام بگیرند، بله بایست توسط تایمر یا ترد هر چند ثانیه متد رو اجرا کنید. البته برای اینکار در ترد نیاز به حلقه و sleep دارید.
    اما برای دریافت داده از دیتابیس در صورت تغییر در اطلاعات از SqlDependency میتونید استفاده کنید.
    اگر مشخص کنید چه کاری میبایست انجام بشه ، میشه انتخاب بهتری داشت.
    فرض کنید میخوایم یه برنامه بنویسیم که میخواد پیامک هایی که به پنل پیامک ارسال میشه را به صورت مداوم دریافت کند؟
    یا مثلا چک کند هر وقت کامپیوتر به اینترنت متصل شد یه کاری بکند
    و کاریی از این قبیل
    حالا ما میخوایم برناممون وقتی اجرا شد مدام چک کنه
    و از همه مهم تر شاید برناممون به مدت طولی مثلا یک ماه در حال اجرا بود
    چه کار کنیم که برنامه با مشکل مواجه نشه

  11. #11

    نقل قول: thread همیشه در حال اجرا

    خب برا اين كارها كه نميخواد هر ثانيه يك بار انجام بدي
    اولا بايد بگردي ببيني براش ايونت نمبتوني پيدا كني
    اگر نبود از اين روش بايد اتفاده مني اونم يه وفقه 10 ثانيه اي بايد بزاري براش

  12. #12
    کاربر دائمی آواتار mz6488
    تاریخ عضویت
    تیر 1391
    محل زندگی
    قشم
    پست
    429

    نقل قول: thread همیشه در حال اجرا

    اینکه بیایم از Thread.Sleep استفاده کنیم یا تایمری که هر 1 ثانیه اجرا بشه فرقی هم میکنه؟

  13. #13

    نقل قول: 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();
    }
    }
    }

  14. #14

    نقل قول: thread همیشه در حال اجرا

    تفاوت thread با Threading.Timer در چیست؟
    در چه جایی از Threading.Timer و در چه جایی باید از Threading استفاده کنیم؟
    مثلا برای چک کردن مداوم پنل پیامک و مشاهده پیامکهای دریافتی هم باید از این روش استفاده کنیم؟

تاپیک های مشابه

  1. نوشتن یک برنامه که همیشه در حال اجرا باشه
    نوشته شده توسط saeedhushmand در بخش Android Studio
    پاسخ: 8
    آخرین پست: پنج شنبه 01 خرداد 1393, 11:55 صبح
  2. سوال: نوشتن برنامه ای که همیشه در حال اجرا باشد !
    نوشته شده توسط sara66 در بخش PHP
    پاسخ: 24
    آخرین پست: دوشنبه 01 خرداد 1391, 19:03 عصر
  3. ساختن سرویس های همیشه در حال اجرا
    نوشته شده توسط Morpheus در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: شنبه 23 خرداد 1388, 15:14 عصر
  4. پیدا کردن Thread در حال اجرا
    نوشته شده توسط razaghi در بخش C#‎‎
    پاسخ: 2
    آخرین پست: پنج شنبه 17 مرداد 1387, 17:00 عصر
  5. cron همیشه در حال اجرا
    نوشته شده توسط alirezador در بخش PHP
    پاسخ: 8
    آخرین پست: پنج شنبه 31 فروردین 1385, 18:47 عصر

قوانین ایجاد تاپیک در تالار

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