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

نام تاپیک: اجرای یک تابع خاص هر یک ثانیه

  1. #1
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    Post اجرای یک تابع خاص هر یک ثانیه

    سلام دوستان من تو برنامم یک تابع دارم که باید هر ثانیه اجرا بشه و مقداری رو set کنه ... چطور و با چه پیاده سازی می تونم این کار رو انجام بدم .

  2. #2

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    timer رو جستجو بفرمایید

  3. #3
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    Post نقل قول: اجرای یک تابع خاص هر یک ثانیه

    منظورتون به این صورت هستش :

    System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();

    private void Form1_Load(object sender, EventArgs e)
    {
    timer1.Interval = 1000;
    timer1.Tick += new EventHandler(timer1_Tick);
    timer1.Start();


    }

    void timer1_Tick(object sender, EventArgs e)
    {
    //Func
    }


    برنامه ی من در طول روز کلا Run هستش . Timer سیستم رو زیاد درگیر نمی کنه ؟!!!!

  4. #4
    کاربر تازه وارد آواتار ashe405
    تاریخ عضویت
    آذر 1388
    محل زندگی
    نیشابور
    پست
    89

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    برنامه ی من در طول روز کلا Run هستش . Timer سیستم رو زیاد درگیر نمی کنه ؟!!!!

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

  5. #5
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    من چیزایی راجع به استفاده از Thread و Background Worker شنیدم ... با اینا و البته بدون Timer می تونم عمل بالا رو پیاده سازی کنم

  6. #6

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    آره Timer برای این کار مناسب نیست بهتر هست background worker رو مطالعه کنید.

  7. #7

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    میتونی یک ترد ایجاد و ران کنی و بعد توی یک حلقه برای چند ثانیه sleep کنی(واسه وقفه زمانی)

  8. #8
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    میشه یه Reference خوب ( چه انگلیسی چه فارسی ) بهم معرفی کنید ... ترجیحا کامل و جامع باشه

  9. #9
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    اگر بخوام از Background Worker استفاده کنم چطور می تونم یک عمل رو هر چند ثانیه تکرار کنم ؟

  10. #10

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    یک مثال از ترد میزارم
            Thread t = new Thread(new ThreadStart(func));
    bool flag = true;
    private void button12_Click(object sender, EventArgs e)
    {
    // start thread t
    t.Start();
    }

    private void button13_Click(object sender, EventArgs e)
    {
    // for kill thread t
    flag = false;
    }

    private static void func()
    {
    // while flag is true
    while (flag)
    {
    MessageBox.Show("show message by thread t");
    // every 10 seconds
    Thread.Sleep(10000);
    }
    }
    برای خاتمه دادن به ترد جدید flag رو false کنید(در فرم کلوزینگ منظورم هست) تا برنامه بدرستی بسته بشه.
    آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 08 فروردین 1393 در 16:24 عصر

  11. #11
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    نقل قول نوشته شده توسط mafaman2003 مشاهده تاپیک
    یک مثال از ترد میزارم
            Thread t = new Thread(new ThreadStart(func));
    static bool flag = true;
    private void button12_Click(object sender, EventArgs e)
    {
    // start thread t
    t.Start();
    }

    private void button13_Click(object sender, EventArgs e)
    {
    // for kill thread t
    flag = false;
    }

    private static void func()
    {
    // while flag is true
    while (flag)
    {
    MessageBox.Show("show message by thread t");
    // every 10 seconds
    Thread.Sleep(10000);
    }
    }
    برای خاتمه دادن به ترد جدید flag رو false کنید(در فرم کلوزینگ منظورم هست) تا برنامه بدرستی بسته بشه.
    ممنون اگه دوستان لطف کنند یه مثال از Background Worker برای پیاده سازی اجرای یک تابع هر 1 ثانیه هم ارائه بدن لطف می کنن .

  12. #12
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    44
    پست
    1,046

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    نقل قول نوشته شده توسط sirvan-me مشاهده تاپیک
    میشه یه Reference خوب ( چه انگلیسی چه فارسی ) بهم معرفی کنید ... ترجیحا کامل و جامع باشه
    اگه کامل و جامع میخواین همونطوری که قبلاً هم خدمت دوستان عرض کردم، فصل 26 کتاب CLR via C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎ کلاً به مبحث Timerها اختصاص داره؛ یه توضیحات خلاصه هم تو تاپیک زیر دادم:
    مشکل با تایمر و هنگ کردن برنامه
    و یک مقاله که تو تاپیک قبلی هم بهش رفرنس دادم: Comparing the Timer Classes in the .NET Framework Class Library
    ____________
    ولی اصلاً فکر نکنید که روالی که شما با Thread یا Background Worker برای تایمر طراحی می‌کنید احتمالاً بهتر از Timer خود دات‌نت (منظور Threading.Timer نه اون‌یکی‌ها) خواهد بود! (بلکه به احتمال بسیار زیاد همون کارآیی رو هم نداشته باشید)
    فرض کنیم، چنین کاری کردین (برای سادگی از Resume استفاده کردم):
        //**************************************
    public Thread thSample = new Thread(DoBackProcess);

    static private void DoBackProcess()
    {
    while (true)
    {
    Thread.Sleep(500);
    // DoSomething();
    }
    }

    public bool ActTimer(bool bEnable = true)
    {
    if (bEnable)
    switch (thSample.ThreadState)
    {
    case ThreadState.Stopped:
    case ThreadState.Suspended:
    thSample.Resume();
    break;

    case ThreadState.Unstarted:
    thSample.Start();
    break;
    }
    else if (!bEnable && thSample.ThreadState == ThreadState.Running)
    thSample.Suspend();

    return thSample.ThreadState == ThreadState.Running;
    }

    //**************************************

    بگذریم که Resume و Suspend و ... منسوخ شدن و بنظر من! بهتره بجاش از EventWaitHandle و متدهای WaitOne و Set استفاده کنید، ولی وقتی بدونید که دستکاری و حتی مقایسه کوچک وضعیت و ... برای یک Thread (یا Mutex و ...) دیگه چقدر در طولانی مدت روی منابع سیستم تاثیر میذاره و Tread pool چه مزایایی برای فرار از این مشکل در اختیار شما قرار میده قدر Threading.Timer رو خواهید دونست! چون اون یک کلاس خاص هست که از thread pool یک thread رو invoke می‌کنه و مدیریت خیلی بهتری در تخصیص و جمع‌آوری منابع داره ...؛ زیاد کــــــــــش نمیدم تا بحث به بیراهه کشیده نشه ولی این صحبت درستی نیست:
    من چیزایی راجع به استفاده از Thread و Background Worker شنیدم ... با اینا و البته بدون Timer می تونم عمل بالا رو پیاده سازی کنم
    مثلاً در کد زیر؛ برای هر ریسورس native ای غیر از Timer بلا سرش میاد:

    public static void Main()
    {
    System.Threading.Timer t = new System.Threading.Timer(TimerCallback, null, 0, 1000);
    // Wait for the user to hit <Enter>
    Console.ReadLine();
    // Refer to t after ReadLine (t will survive GCs until Dispose returns)
    t.Dispose();
    }

    private static void TimerCallback(Object o)
    {
    // Display the date/time when this method got called.
    Console.WriteLine("In TimerCallback: " + DateTime.Now);
    // Force a garbage collection to occur for this demo.
    GC.Collect();
    }

    اگه دوست داشتین بیشتر در موردش صحبت می‌کنیم ...
    +=+=+=+=+=++=
    خلاصه‌اش اینکه: با خیال راحت از Threading.Timer استفاده کنید و برای کاری که میشه با اون به نتیجه رسید دنبال راه‌های فرعی نباشید..

  13. #13
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    خیلی ممنون آقای Saeed_m_farid ، بسیار کامل و جامع توضیح دادین . تاپیک ها و Reference ی که فرمودید دارم مطالعه می کنم . فعلا چون مطلب زیادی راجع این مبحث نمی دونم درست نمیدونم وارد بحث با شما بشم که این درسته یا اون درسته ( گرچه تا حدود زیادی راضی شدم که استفاده از Timer خود زبان بهتره ) . بعد از خوندن مطالب حتما ازتون کمک می گیرم .

  14. #14
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    من کاری رو که می خوام انجام بدم یکبار شرح می دم ( به صورت ساده تر ) ... البته من قبلا این سوال رو مطرح کرده بودم اما با جوابا قانع نشدم ... شاید روشی که من دنبالشم خیلی ساده تر از این ها باشه .

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

    1 ) جدول سپرده کوتاه مدت ( شماره حساب مشتری ، تاریخ افتتاح حساب ، تاریخ آخرین به روز رسانی ، تاریخ واریز مبلغ ، موجودی )
    2 ) جدول سپرده بلند مدت ( شماره حساب مشتری ،تاریخ افتتاح حساب ، تاریخ واریز مبلغ ، موجودی )

    برنامه ی من اینطوریه که یه مشتری میاد یه سپرده بلند مدت باز می کنه ، همزمان با اون حساب ( رکوردی تو جدول سپرده بلند مدت ) یه حساب کوتاه مدت ( رکوردی تو جدول سپرده کوتاه مدت با موجودی لولیه سود 21 درصد موجودی حساب بلند مدت ) براش باز میشه . حالا برنامه ی من باید هر بار چک کنه به محض اینکه اختلاف تاریخ و زمان بین آخرین به روز رسانی رکورد مربوط به هر مشتری تو جدول سپرده کوتاه مدت با تاریخ و زمان جاری برابر یک ماه شد ، دوباره سود 21 درصدی موجودی حساب بلند مدت رو حساب کنه و به موجودی حساب کوتاه مدت مشتری اضافه کنه ... ( این یه بخش کاره ) دوستان لطف کنن راهنمایی بفرمایید ...

  15. #15
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    وااااااااااااااای
    فقط وااااااااااای

    سلام
    این دیگه چه کاریه؟
    سرم ترکید.

    شما میتونید خیلی ساده موجودی حساب رو وقتی درخواست میشه حساب کنید و وقتی قرار شد که موجودی تغییر کنه(قبل از برداشت یا واریز) تغییرات رو ذخیره کنید.

    pseudo code
    long GetBalance(AccountInfo Acc){
    long LastBalance= GetLastBalance_Internal();
    DateTime LastChange = GetLastGrowthDateTime_Internal();
    long CurrentBalance=(GrowthRatio ^ (DateTime.UtcNow - LastChange).Days);
    return CurrentBalance;
    }
    برای واریز سود دو روش دارید.
    مشتری مدار:
    وقتی که سطری به حساب اضافه میشه, قبل از insert, این مقدار رو به حساب اضافه کنید.

    سیستم بانکداری موجود در کشور:
    این مقادیر رو میتونید به صورت دستی توسط کاربر هر ماه جدا insert کنید
    آخرین ویرایش به وسیله FastCode : جمعه 30 تیر 1391 در 22:35 عصر دلیل: قسمت مربوط به تاریخ اصلاح شد

  16. #16
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    وااااااااااااااای
    فقط وااااااااااای

    سلام
    این دیگه چه کاریه؟
    سرم ترکید.

    شما میتونید خیلی ساده موجودی حساب رو وقتی درخواست میشه حساب کنید و وقتی قرار شد که موجودی تغییر کنه(قبل از برداشت یا واریز) تغییرات رو ذخیره کنید.

    pseudo code
    long GetBalance(AccountInfo Acc){
    long LastBalance= GetLastBalance_Internal();
    DateTime LastChange = GetLastRecordDateTime_Internal();
    long CurrentBalance=(GrowthRatio ^ (DateTime.UtcNow - LastChange).Days);
    return CurrentBalance;
    }
    برای واریز سود دو روش دارید.
    مشتری مدار:
    وقتی که سطری به حساب اضافه میشه, قبل از insert, این مقدار رو به حساب اضافه کنید.

    سیستم بانکداری موجود در کشور:
    این مقادیر رو میتونید به صورت دستی توسط کاربر هر ماه جدا insert کنید
    فوق العاده بود ... میشه راجع به کدی که نوشتین یذره توضیح بدین .. کدی که نوشتین زمانی استفاده میشه که بخوایم موجودی یه حساب و تغییر بدیم ... اگر بخوایم مشاهده هم داشته باشیم به همین صورت عمل می کنیم دیگه یعنی اطلاعات آنی حساب میشن .... بازم ممنون

  17. #17
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    میشه در رابطه با راهکارهای واریز سود یه توضیحی بدید .

  18. #18
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    سلام
    متاسفانه این یکی دو روز درگیر ۴ ۵ تا کار شدم ولی در اولین فرصت توضیح میدم.
    در ابتدا باید همه ی record ها دارای تاریخ و ساعت و ثانیه باشند که بتونید آخرین سطر رو استخراج کنید.
    سود در هر لحظه برابر است با موجودی ضربدر درصد سود به توان زمان گذشته از آخرین محاسبه سود
    همیشه قبل از insert باید محاسبه قبلی رو پیدا کنید و با آخرین موجودی(معمولاً سطر بعد) در فرمول بالا قرار بدید

  19. #19
    کاربر دائمی آواتار MehdiElexal
    تاریخ عضویت
    آذر 1388
    محل زندگی
    پشت میز
    پست
    519

    نقل قول: اجرای یک تابع خاص هر یک ثانیه

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    یک مثال از ترد میزارم
            Thread t = new Thread(new ThreadStart(func));
    static bool flag = true;
    private void button12_Click(object sender, EventArgs e)
    {
    // start thread t
    t.Start();
    }

    private void button13_Click(object sender, EventArgs e)
    {
    // for kill thread t
    flag = false;
    }

    private static void func()
    {
    // while flag is true
    while (flag)
    {
    MessageBox.Show("show message by thread t");
    // every 10 seconds
    Thread.Sleep(10000);
    }
    }
    برای خاتمه دادن به ترد جدید flag رو false کنید(در فرم کلوزینگ منظورم هست) تا برنامه بدرستی بسته بشه.
    رویداد button13 ترد را متوقف نمیکنه
    چطور باید ترد را در حین انجام کار متوقف کرد ؟
    نه که فرم بسته شه ترد وایسه نه
    موقع اجرای برنامه رو همون دکمه 13 که زد هر جا هست متوقف شه
    چطور میشه ؟ ممنون

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

  1. اجرای یک تابع خاص بر روی یک ستون از جدول در View
    نوشته شده توسط mehdin69 در بخش T-SQL
    پاسخ: 1
    آخرین پست: یک شنبه 29 خرداد 1390, 14:23 عصر
  2. سوال: اجرای یک تابع خاص بر روی یک ستون از جدول در View
    نوشته شده توسط mehdin69 در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 29 خرداد 1390, 12:08 عصر
  3. اجرای چند تابع در یک صفحه ، بطور همزمان
    نوشته شده توسط pzh در بخش PHP
    پاسخ: 1
    آخرین پست: سه شنبه 23 اسفند 1384, 17:44 عصر
  4. اجرای یک تابع در ساعتی مشخص در هر روز
    نوشته شده توسط در بخش SQL Server
    پاسخ: 14
    آخرین پست: دوشنبه 24 اسفند 1383, 11:01 صبح

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

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