ورود

View Full Version : شبیه سازی تایمر با سی



benyamin_pc
دوشنبه 21 اسفند 1385, 06:39 صبح
با برنامه ای مثل سی که وقتی یک عمل را انجام میده بعد میره عمل بعدی رو انجام میده و تا وقتی که عمل فعلی تموم نشده عمل بعدی رو انجام نمی ده چطور میشه یک عملی رو چند ثانیه یک بار انجام داد در حالی که کارهای دیگه ای هم در حال اجرا باشند نه فقط یه برنامه که یه کار رو تکراری انجام می ده

Farsad
دوشنبه 21 اسفند 1385, 08:24 صبح
شما برای این کار می‌تونی از Thread استفاده کنی. البته باید بدونی که از درون یک Thread‌نمی‌تونی به صورت مستقیم به قسمت‌ها و توابع دیگر برنامه ات دسترسی داشته باشی.

benyamin_pc
سه شنبه 22 اسفند 1385, 02:29 صبح
میشه یک مثال با سی اینجا بذارین؟
مثلا هر 50 میل یه بار یه عدد چاپ شه این در صورتی باشه که برنامه آماده گرفتن یک عدد از کاربر باشه و بعد از گرفتن طی یک سری مراحل زمان بر عملیات بسیار زیادی روی عدد انجام شه و خروجی های مختلفی بده اما در حین تمام این کارها اون عدد مرتب هر 50 میل یه بار چاپ شه.

Farsad
سه شنبه 22 اسفند 1385, 08:02 صبح
مثال برای MFC میخواهید یا win32 ؟

benyamin_pc
سه شنبه 22 اسفند 1385, 10:11 صبح
نه با VC++ نمی خوام اون که خودش تابع SetTimer داره با سی می خوام بدونم چطوری میشه همون که محیطش تو داس

am_abbas65
یک شنبه 27 اسفند 1385, 11:22 صبح
آره من هم دنبال این تابع c++ هستم .مثلا هر 5 ثانیه یک بار برنامه یک سطر پایین بره . باید از structer time استفاده کنیم ولی نمیدونم چطوری ؟؟

benyamin_pc
دوشنبه 28 اسفند 1385, 12:35 عصر
با سی پلاس پلاس به طور آماده میشه از تابع SetTimer استفاده کرد اما با سی سخته چون باید از وقفه ها استفاده کرد

am_abbas65
دوشنبه 28 اسفند 1385, 17:05 عصر
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<dos.h>
void main()
{
struct time time,time_temp;
clrscr();
gettime(&time);
time_temp=time;
int counter;
while(1)
{
printf("%d\n",time.ti_sec);
time_temp=time;
while(time.ti_sec!=time_temp.ti_sec+5)
{
gettime(&time);
if(time.ti_sec==0) time_temp.ti_sec=0;
}
}
}

benyamin_pc
سه شنبه 29 اسفند 1385, 01:53 صبح
while(1) این چه شرطیه؟

american_iran2006
سه شنبه 29 اسفند 1385, 10:33 صبح
به این میگن حلقه بی نهایت :: چون همیشه شرط درسته

benyamin_pc
پنج شنبه 02 فروردین 1386, 02:59 صبح
خوب پس میشه بگین کی از این حلقه قرار بیاد بیرون تا بقیه کار های برنامه اجرا شن؟ما که نمی خواهیم برنامه فقط همین یه تیکه باشه
در عین حال که این تیکه کد در حال اجراس می خوام برنامه کارهای دیگه ای هم بکنه مثل برنامه نویسی با برنامه های ویژوال تایمر کار خودش رو انجام می ده یعنی هر کدی که داخل تایمر نوشته شده در عین حال برنامه داره کارهای دیگه ای هم انجام می ده اینو می دونم که CPU در هر لحظه یه کار بیشتر انجام نمیده و این بخاطر فرم برنامه نویسیه اما همینو منم می خوام یعنی شبیه سازی این حالت با سی


میشه یک مثال با سی اینجا بذارین؟
مثلا هر 50 میل یه بار یه عدد چاپ شه این در صورتی باشه که برنامه آماده گرفتن یک عدد از کاربر باشه و بعد از گرفتن طی یک سری مراحل زمان بر عملیات بسیار زیادی روی عدد انجام شه و خروجی های مختلفی بده اما در حین تمام این کارها اون عدد مرتب هر 50 میل یه بار چاپ شه.

american_iran2006
پنج شنبه 02 فروردین 1386, 15:07 عصر
خوب پس میشه بگین کی از این حلقه قرار بیاد بیرون تا بقیه کار های برنامه اجرا شن؟ما که نمی خواهیم برنامه فقط همین یه تیکه باشه
در عین حال که این تیکه کد در حال اجراس می خوام برنامه کارهای دیگه ای هم بکنه مثل برنامه نویسی با برنامه های ویژوال تایمر کار خودش رو انجام می ده یعنی هر کدی که داخل تایمر نوشته شده در عین حال برنامه داره کارهای دیگه ای هم انجام می ده اینو می دونم که CPU در هر لحظه یه کار بیشتر انجام نمیده و این بخاطر فرم برنامه نویسیه اما همینو منم می خوام یعنی شبیه سازی این حالت با سی

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

یعنی :: ما یک شی از timer میسازیم و بعد میندازیمش تو حلقه که حی چکش کنه

بعد یک شرط میزاریم میگیم اگه باقیمانده این تایمر بر 5 برابر با صفر شد این کارو انجام بده

اگه میخواید عدد هم بگیره بستگی داره که عدد رو چند بار بخوای بگیره اگه یک باره که بیرون حلقه اگه زیاد داخل حلقه

تو محیط ویژوال فرق داره ::: چون ما تایمرو پشت سره هم چک میکنیم ؛ اما یک text box هم داریم که توش مقدار وارد میکنیم و بعد میگیم هر موقع این دکمه زده شد این کارو انجام بده به عبارتی چند برنامه به طوره همزمان در حاله اجراست ؛ نه یک برنامه

benyamin_pc
جمعه 03 فروردین 1386, 02:14 صبح
من هم دقیقا" همین رو می خوام بدونم که چطوری میشه برنامه نویسی موازی انجام داد به نحوی که انگار چند برنامه در حال اجرا باشه با این روش ها هر چند ما شرط های زیادی بذاریم اما اجرای ادامه برنامه باعث تاخیر در عمل کرد تایمر می شود و به مشکل می رسیم شاید منظورم رو با اون مثال نتونسته باشم برسونم اما اون برنامه ای که نوشته شد راه حل مشکل من نیست
به نتیجه ای که خودم رسیدم اینه که باید یه برنامه مقیم داشته باشم که کار اون تایمر را انجام بده