PDA

View Full Version : چگونه کار تایمرهای vb رو در c++ شبیه سازی کنیم؟



one hacker alone
جمعه 16 فروردین 1392, 10:50 صبح
با یاد خدا
سلام دوستان
عیدتون مبارک
در برنامه های ویژوالی مادامی که پنجره باز هست برنامه در حال اجرا هست
اما در برنامه های win32 معمولی برای درحال اجرا نگه داشتن برنامه از while استفاده میکنیم
حالا میخواستم بدونم ما اگه بخوایم یک عملیاتی در بازههای زمانی یکسان اجرا بشه در زبان هایی مثل VB6 از کنترل تایمر استفاده میکنیم
اما در C++ این کار رو چجوری باید انجام بدیم؟

tstsst
شنبه 17 فروردین 1392, 15:40 عصر
سلام
من خودم vb.net کارم و به طور تصادفی به این تالار اومدم راه درستش و نمی دونم ولی به این صورت می تونید بنویسید (اینتروالش رو مثل وی بی کردم!)

#include <iostream>
using namespace std;

void timer(int interval,int end)
{
if (end == 0)
return ;

int i = interval * 100000;
while (i--)
;

{
//code
}
return timer(interval,end--);
}
int main()
{
timer(1000,5);
return 0;
}


--ویرایش--
همون طور که گفتم من تازه کارم و فقط ایده ای که به ذهنم رسید رو گفتم

MinusOne
شنبه 17 فروردین 1392, 22:00 عصر
سلام
من خودم vb.net کارم و به طور تصادفی به این تالار اومدم راه درستش و نمی دونم ولی به این صورت می تونید بنویسید (اینتروالش رو مثل وی بی کردم!)

#include <iostream>
using namespace std;

void timer(int interval,int end)
{
if (end == 0)
return ;

int i = interval * 100000;
while (i--)
;

{
//code
}
return timer(interval,end--);
}
int main()
{
timer(1000,5);
return 0;
}

مطمئنید که این کار تایمر رو انجام میده ؟ فکر کنم بایستی از برنامه نویسی چند نخی (MultiThreading) استفاده بشه که بشه همزمان با اجرای تایمر کار های دیگه رو هم انجام داد در غیر اینصورت یا تایمر کار می کنه یا برنامه.

one hacker alone
یک شنبه 18 فروردین 1392, 13:23 عصر
ممنون از پاسختون اول اینکه به قول دوستمون باید از چند نخی استفاده کرد وگرنه برنامه میخوابه و دوم اینکه فکر کنم با این مسیر که شما رفتین بهتره از توابع تاخیر استفاده کنیم تا حلقه های تکرار چون باعث میشه سی پی یو درگیر پراسس ما بشه
دوستان کسی قبلا به این موضوع فکر نکرده

#target
دوشنبه 19 فروردین 1392, 14:54 عصر
تابع SetTimer
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644906(v=vs.85).aspx