تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 10 از 10

نام تاپيک: ساخت یک تایمر که حداقل استفاده از Cpu و Ram را داشته باشه

  1. #1
    اگه نباشه جاش خالی می مونه BabyBoy's Avatar
    تاريخ عضويت
    Jun 2006
    محل سكونت
    bed
    پست ها
    290

    14 ساخت یک تایمر که حداقل استفاده از Cpu و Ram را داشته باشه

    سلام:
    من می خوام یه تامر بنویسم که حداقل استفاده از CPU و RAM را داشته باشه...
    حتما تا حالا دقت کردید که تایمرایی که با چرخه ها ساخته میشن از cpu زیاد استفاده می کنن و این باعث می شه که برنامه به بقیه کاراش نرسه.
    به نظر شما چیکار میشه کرد؟
    (لطفا هر نظری هم داشتید بگید)
    ممنون.
    Last edited by BabyBoy; 04-11-2007 at 17:00.

  2. #2
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام.
    یه مقدار سوالتون کیج کننده هست!
    اگه برای ویندوز یا هر سیستم عاملی برنامه مینویسین کافی از تایمر های سیستم عامل مورد نظر استفاده
    کنین. (چند API براشون وجود داره.)
    اما اگه از چرخه منظورتون حلقه ها هستن , خب مسلما تلاش بیهوده ای است.
    باید از Thread ها برای این کار استفاده بشه.
    اگه توجه کرده باشین برنامه هایی وجود دارن که همزمان چندین کار رو با هم انجام میدن.
    نمونه ساده ای از اون MSWord هست. همزمان که شما تایپ میکنین برنامه براتون غلط گیری رو هم انجام
    میده. بدونه اینکه در سایر کار ها مشکلی پیش بیاد.
    این عمل با استفاده از Thread ها و به اشتراک گذاشتن منابع توسط mutex یا semaphore و یا criticalsection
    انجام میشه و جزئ مباحث پیشرفته ی برنامه نویسی هست.
    البته در موردشون منابع خوبی در net وجود داره. کافی کمی در موردشون جستجو کنین.

    موفق باشین.

  3. #3
    اگه نباشه جاش خالی می مونه BabyBoy's Avatar
    تاريخ عضويت
    Jun 2006
    محل سكونت
    bed
    پست ها
    290

    1

    ببخشید من تازه یک ماه دارم C می خونم البته قبلا VB کار کردم.
    این تایمری هم که می خوام بسازم رو توی Turbo C باید باشه . من VC کار نکردم این چیزایی گفتید توی Turbo C هم کار میکنه؟
    اگه یه مثال بزنید ممنون می شم!!!

  4. #4
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    احتمالا از Turbo C تحت DOS استفاده میکنید.

    کافیه از Timer.h استفاده کنین. به help خود Turbo C یه نگاهی بندازین.
    چیزایی که درموردشون صحبت کردیم درباره ی Windows بود.
    در سیستم عامل DOS مقداری قضیه فرق میکنه.

  5. #5
    اگه نباشه جاش خالی می مونه BabyBoy's Avatar
    تاريخ عضويت
    Jun 2006
    محل سكونت
    bed
    پست ها
    290

    14

    سلام
    ممنون از این کمک کردین

    ولی من از Turbo C تحت ویندوز استفاده می کنم.

    ولی وقتی میخوام از Timer.h استفاده کنم ارور میده

    توی Help هم چیزی درباره Timer.h نبود؟


  6. #6
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    شما میتونی windows.h رو توی این Turbo سی include کنی؟

  7. #7
    اگه نباشه جاش خالی می مونه BabyBoy's Avatar
    تاريخ عضويت
    Jun 2006
    محل سكونت
    bed
    پست ها
    290

    14

    آره ارور نمیده . ولی مگه از اینم میشه استفاده کرد؟

  8. #8
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    آره میتونی از توابع ویندوز برای ساخت تایمر یا ایجاد وقفه توی برنامه و ساخت دستی تایمر استفاده کنی.
    با تابع Sleep میشه یه وقفه ی n میلی ثانیه ای توی برنامه (توی Thread جاری) ایجاد کرد.
    مثلا با این کد , تابع myTimerFunc هر 1 ثانیه 1 بار خودش رو فراخوانی میکنه و Hello رو چاپ میکنه:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته میشه از توابع SetTimer رو KillTimer ویندوز هم استفاده کرد ولی اگه برنامت تحت Console هست (که احتمالا همینطوره) نیاز به نوشتن Message Loop کاری که اگه قبلیه کارت رو راه میندازه نیاز نیست ازین روش استفاده کنی.

  9. #9
    در آغاز فعالیت
    تاريخ عضويت
    Dec 2007
    پست ها
    1

    پيش فرض

    با سلام
    برای این کار یک برنامه با قالب MFC ایجاد کنید. سپس در برنامه دیالوگی در تابع OnInitDialog تابع دستور زیر را تایپ کنید:
    SetTimer(1,1000,NULL); و در برنامه های MDI و SDI این تابع را در تابع OnInitUpdate تایپ کنید. سپس با استفاده Class wizard در رویداد WM_TIMER را پیدا کرده و دو بار برروی آن کلیک کنید تا تابع OnTimer به پروژه اضافه گردد و سپس کد زیر را در آن تایپ کنید:
    CTime time=CTime::GetCurrentTime();
    if(time.GetSecond()%2==0)
    MyFunction();
    else
    MySecondFunction();
    در دستور فوق در ثانیه ای دستور Myfunction و در ثانیه بعدی MySecondFunction اجرا می شود. تابع SetTimer باعث راه اندازی تابع OnTimer می شود. تابع SetTimer مقداری را بر می گرداند که همان مقدار آرگومان اول است (در اینجا عدد 1 می باشد) و آرگومان دوم که بر حسب میلی ثانیه می باشد فاصله بین اجرا را تعیین می کند مثلا هر یک ثانیه یا هر دو ثانیه (2000) و.... تابع فوق یک مقدار عدد صحیح بر می گرداند که همان مقدار آرگومان اول است و به پارامتر تابع OnTimer ارسال می کند. شما می توانید هر چند تایمر که بخواهید در برنامه ایجاد کنید. به کد زیر نگاه کنید:

    دو متغیر عمومی از نوع int و به نامهای ID1 و ID2 و با دسترسی public در کلاس برنامه تعریف کنید و در تابع OnInitDialog کد زیر را بنویسید:
    ID1=SetTimer(1,1000,NULL)
    ID2=SetTimer(2,5000,NULL)
    سپس در تابع OnTimer کد یر را وارد کنید:
    CTime time=CTime::GetCurrentTime();
    if(nIDEvents==1)
    {
    if(time.GetSecond()%2==0)
    MyFunction();
    else
    MySecondFunction();
    }
    else if(nIDEvents==2)
    {
    ...
    .
    .
    ..
    }
    مقدار برگشتی دو تابع SetTimer در نتغیرهای ID1 و ID2 قرار می گیرد و به تابع OnTimer ارسال می شود و با استفاده از مقدارهای ارسال شده تععین می کنیم که در چه فاصله زمانی کدام کار انجام شود. لازم به ذکر است که محدوده زمانی یک تایمر بین 55 میلی ثانیه تا 32^2 منهای 1 می تواند باشد(کتاب آموزش ویژوال سی++ نوشته دیویس چاپمن ترجمه احترام توسلی)

  10. #10
    داره خودمونی میشه
    تاريخ عضويت
    Dec 2007
    پست ها
    102

    پيش فرض

    با سلام
    برای این کار یک برنامه با قالب MFC ایجاد کنید. سپس در برنامه دیالوگی در تابع OnInitDialog تابع دستور زیر را تایپ کنید:
    SetTimer(1,1000,NULL); و در برنامه های MDI و SDI این تابع را در تابع OnInitUpdate تایپ کنید. سپس با استفاده Class wizard در رویداد WM_TIMER را پیدا کرده و دو بار برروی آن کلیک کنید تا تابع OnTimer به پروژه اضافه گردد و سپس کد زیر را در آن تایپ کنید:
    CTime time=CTime::GetCurrentTime();
    if(time.GetSecond()%2==0)
    MyFunction();
    else
    MySecondFunction();
    در دستور فوق در ثانیه ای دستور Myfunction و در ثانیه بعدی MySecondFunction اجرا می شود. تابع SetTimer باعث راه اندازی تابع OnTimer می شود. تابع SetTimer مقداری را بر می گرداند که همان مقدار آرگومان اول است (در اینجا عدد 1 می باشد) و آرگومان دوم که بر حسب میلی ثانیه می باشد فاصله بین اجرا را تعیین می کند مثلا هر یک ثانیه یا هر دو ثانیه (2000) و.... تابع فوق یک مقدار عدد صحیح بر می گرداند که همان مقدار آرگومان اول است و به پارامتر تابع OnTimer ارسال می کند. شما می توانید هر چند تایمر که بخواهید در برنامه ایجاد کنید. به کد زیر نگاه کنید:

    دو متغیر عمومی از نوع int و به نامهای ID1 و ID2 و با دسترسی public در کلاس برنامه تعریف کنید و در تابع OnInitDialog کد زیر را بنویسید:
    ID1=SetTimer(1,1000,NULL)
    ID2=SetTimer(2,5000,NULL)
    سپس در تابع OnTimer کد یر را وارد کنید:
    CTime time=CTime::GetCurrentTime();
    if(nIDEvents==1)
    {
    if(time.GetSecond()%2==0)
    MyFunction();
    else
    MySecondFunction();
    }
    else if(nIDEvents==2)
    {
    ...
    .
    .
    ..
    }
    مقدار برگشتی دو تابع SetTimer در نتغیرهای ID1 و ID2 قرار می گیرد و به تابع OnTimer ارسال می شود و با استفاده از مقدارهای ارسال شده تععین می کنیم که در چه فاصله زمانی کدام کار انجام شود. لازم به ذکر است که محدوده زمانی یک تایمر بین 55 میلی ثانیه تا 32^2 منهای 1 می تواند باشد(کتاب آموزش ویژوال سی++ نوشته دیویس چاپمن ترجمه احترام توسلی)
    salam nemidonam barname round robin be darde mikhore ya na

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •