واضح آرشیو وب فارسی:سایت ریسک: BabyBoy04-11-2007, 04:56 PMسلام: من می خوام یه تامر بنویسم که حداقل استفاده از CPU و RAM را داشته باشه... حتما تا حالا دقت کردید که تایمرایی که با چرخه ها ساخته میشن از cpu زیاد استفاده می کنن و این باعث می شه که برنامه به بقیه کاراش نرسه. به نظر شما چیکار میشه کرد؟ (لطفا هر نظری هم داشتید بگید) ممنون. :8: someone05-11-2007, 02:34 AMسلام. یه مقدار سوالتون کیج کننده هست! اگه برای ویندوز یا هر سیستم عاملی برنامه مینویسین کافی از تایمر های سیستم عامل مورد نظر استفاده کنین. (چند API براشون وجود داره.) اما اگه از چرخه منظورتون حلقه ها هستن , خب مسلما تلاش بیهوده ای است. باید از Thread ها برای این کار استفاده بشه. اگه توجه کرده باشین برنامه هایی وجود دارن که همزمان چندین کار رو با هم انجام میدن. نمونه ساده ای از اون MSWord هست. همزمان که شما تایپ میکنین برنامه براتون غلط گیری رو هم انجام میده. بدونه اینکه در سایر کار ها مشکلی پیش بیاد. این عمل با استفاده از Thread ها و به اشتراک گذاشتن منابع توسط mutex یا semaphore و یا criticalsection انجام میشه و جزئ مباحث پیشرفته ی برنامه نویسی هست. البته در موردشون منابع خوبی در net وجود داره. کافی کمی در موردشون جستجو کنین. موفق باشین. BabyBoy06-11-2007, 01:00 PMببخشید من تازه یک ماه دارم C می خونم البته قبلا VB کار کردم. این تایمری هم که می خوام بسازم رو توی Turbo C باید باشه . من VC کار نکردم این چیزایی گفتید توی Turbo C هم کار میکنه؟ اگه یه مثال بزنید ممنون می شم!!! :11: :8: someone06-11-2007, 03:53 PMدوباره سلام. احتمالا از Turbo C تحت DOS استفاده میکنید. کافیه از Timer.h استفاده کنین. به help خود Turbo C یه نگاهی بندازین. چیزایی که درموردشون صحبت کردیم درباره ی Windows بود. در سیستم عامل DOS مقداری قضیه فرق میکنه. BabyBoy07-11-2007, 05:14 PMسلام ممنون از این کمک کردین ولی من از Turbo C تحت ویندوز استفاده می کنم. ولی وقتی میخوام از Timer.h استفاده کنم ارور میده توی Help هم چیزی درباره Timer.h نبود؟ :41: :11: m3hrz4d08-11-2007, 06:51 PMشما میتونی windows.h رو توی این Turbo سی include کنی؟ BabyBoy12-11-2007, 12:23 PMآره ارور نمیده . ولی مگه از اینم میشه استفاده کرد؟ m3hrz4d12-11-2007, 01:56 PMآره میتونی از توابع ویندوز برای ساخت تایمر یا ایجاد وقفه توی برنامه و ساخت دستی تایمر استفاده کنی. با تابع Sleep میشه یه وقفه ی n میلی ثانیه ای توی برنامه (توی Thread جاری) ایجاد کرد. مثلا با این کد , تابع myTimerFunc هر 1 ثانیه 1 بار خودش رو فراخوانی میکنه و Hello رو چاپ میکنه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! البته میشه از توابع SetTimer رو KillTimer ویندوز هم استفاده کرد ولی اگه برنامت تحت Console هست (که احتمالا همینطوره) نیاز به نوشتن Message Loop کاری که اگه قبلیه کارت رو راه میندازه نیاز نیست ازین روش استفاده کنی. هاشمی05-12-2007, 10:52 AMبا سلام برای این کار یک برنامه با قالب 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 و به نامهای ID 1 و ID 2 و با دسترسی public در کلاس برنامه تعریف کنید و در تابع OnInitDialog کد زیر را بنویسید: ID 1=SetTimer(1,1000,NULL) ID 2=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 در نتغیرهای ID 1 و ID 2 قرار می گیرد و به تابع OnTimer ارسال می شود و با استفاده از مقدارهای ارسال شده تععین می کنیم که در چه فاصله زمانی کدام کار انجام شود. لازم به ذکر است که محدوده زمانی یک تایمر بین 55 میلی ثانیه تا 32^2 منهای 1 می تواند باشد(کتاب آموزش ویژوال سی++ نوشته دیویس چاپمن ترجمه احترام توسلی) soda_india18-12-2007, 06:06 PMبا سلام برای این کار یک برنامه با قالب 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 و به نامهای ID 1 و ID 2 و با دسترسی public در کلاس برنامه تعریف کنید و در تابع OnInitDialog کد زیر را بنویسید: ID 1=SetTimer(1,1000,NULL) ID 2=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 در نتغیرهای ID 1 و ID 2 قرار می گیرد و به تابع OnTimer ارسال می شود و با استفاده از مقدارهای ارسال شده تععین می کنیم که در چه فاصله زمانی کدام کار انجام شود. لازم به ذکر است که محدوده زمانی یک تایمر بین 55 میلی ثانیه تا 32^2 منهای 1 می تواند باشد(کتاب آموزش ویژوال سی++ نوشته دیویس چاپمن ترجمه احترام توسلی) salam nemidonam barname round robin be darde mikhore ya na سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 353]