در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

بیات

زمان در زبان c یا ++c

دوستان تابعی میخام که بهم هر مثلا 20ثانیه ای یکبار وقفه نرم افزاری بده

وبره سراغ اجرای یک تابع برای مدیریت سیگنال.

#کامپایلر #تابع #زبان_سی #سی_پلاس_پلاس
لذت یادگیری با توسینسو
به عنوان شخصی که مدت هاست از سایت توسینسو استفاده می کنم باید بگم که واقعاً یکی از بهترین مرجع ها برای ارتقاء دانش شخصی هست. دوره های سایت، راهکارها و مطالب، همگی عالی هستند.

سلام به شما itpro ای عزیز

برای این کار از فایل header به نام time.h استفاده کنید.

سرنوشت ما با افکارمان تغییر می کند؛ اگر افکارمان همیشه مطابق با خواسته هایمان باشند، همان چیزی می شویم که آرزو داریم و همان کاری را می کنیم که می خواهیم
بیات

نمیتونید منحصرا بگید چه توابعی؟؟؟؟؟؟؟؟؟تابتونم برسیش کنم؟

بببنید به نظرتون با سیگنالهانباید کارکنم؟

که سریک زمانی اون تابع روفرااخانی بکنم؟؟؟؟؟؟

اگه بگید منحصرا چه تابعی ممنون میشم

struct tm {
   int tm_sec;         /* seconds,  range 0 to 59          */
   int tm_min;         /* minutes, range 0 to 59           */
   int tm_hour;        /* hours, range 0 to 23             */
   int tm_mday;        /* day of the month, range 1 to 31  */
   int tm_mon;         /* month, range 0 to 11             */
   int tm_year;        /* The number of years since 1900   */
   int tm_wday;        /* day of the week, range 0 to 6    */
   int tm_yday;        /* day in the year, range 0 to 365  */
   int tm_isdst;       /* daylight saving time             */
};

1
char *asctime(const struct tm *timeptr)

Returns a pointer to a string which represents the day and time of the structure timeptr.
2 	

clock_t clock(void)

Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program)
3 	

char *ctime(const time_t *timer)

Returns a string representing the localtime based on the argument timer.
4 	

double difftime(time_t time1, time_t time2)

Returns the difference of seconds between time1 and time2 (time1-time2).
5 	

struct tm *gmtime(const time_t *timer)

The value of timer is broken up into the structure tm and expressed in Coordinated Universal Time (UTC) also known as Greenwich Mean Time (GMT).
6 	

struct tm *localtime(const time_t *timer)

The value of timer is broken up into the structure tm and expressed in the local time zone.
7 	

time_t mktime(struct tm *timeptr)

Converts the structure pointed to by timeptr into a time_t value according to the local time zone.
8 	

size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)

Formats the time represented in the structure timeptr according to the formatting rules defined in format and stored into str.
9 	

time_t time(time_t *timer)

Calculates the current calender time and encodes it into time_t format.

بیات

این رو من پیداکردم که براتون میزارم گه بتونیم بهتره که این روبه صورت نخ راه انداخت یعنی به صورت نخ اجراش کنیم.

تا بشه کارهای دیگه روهم انجام دادکه برنامه لنگ نزنه

اگه کسی متونه به صورت نخ پیادش کنه خوبه

باریسمان دز زبان سی بهتره.امامافعلا ساده راهش می ندازیم ببینم چی میشه ازدوستان میخایم که کمک کنند تا کاملش کنیم

امااین کارنمیده میگم چرا در پایین درستش میکنم

#include  <stdio.h>
#include  <signal.h>


void  ALARMhandler(int sig)
{
  signal(SIGALRM, SIG_IGN);          /* ignore this signal       */
  printf("Hello");
  signal(SIGALRM, ALARMhandler);     /* reinstall the handler    */
 

}

int main(int argc, char *argv[])
{
 signal(SIGALRM, ALARMhandler);
  alarm(2);                     /* set alarm clock          */
  while (1)
    ;
  printf("All done");
}

خب ببینید انگار اینجوریه جایی خوندم داده هادر کش میمونه مگراینکه به انتهای خط برسه پس برای hello باید \n گذاشت که به انتهای خط بپره اما میشه کلا از puts("string"); روبه کارببریم در سرفایل stdio.h که دیگه مشکل printf و رفتن به خط بعدرونداشته باشه.هرچند به کاربردن printf ارلحاظ امنتی کارمناسبی نیست وخطر امینتی داره وبهتره ازهماون puts به کارگیری کرد

#include  <stdio.h>
#include  <signal.h>


void  ALARMhandler(int sig)
{
  signal(SIGALRM, SIG_IGN);          /* ignore this signal       */
  printf("Hello \n");
  signal(SIGALRM, ALARMhandler);     /* reinstall the handler    */
 

}

int main(int argc, char *argv[])
{
signal(SIGALRM, ALARMhandler);
  alarm(2);                     /* set alarm clock          */
  while (1)
    ;
  printf("All done");
}

اما ببنید مامیخایم هربار این برنامه اجرابشه .پس چه بهتر که بیایم بنویسیم یعنی چی؟ یعنی این دستور به صورت دوره ای کارماروانجام میده

#include  <stdio.h>
#include  <signal.h>


void  ALARMhandler(int sig)
{
  signal(SIGALRM, SIG_IGN);          /* ignore this signal       */
  printf("Hello");
  signal(SIGALRM, ALARMhandler);     /* reinstall the handler    */
  alarm(2);

}

int main(int argc, char *argv[])
{
signal(SIGALRM, ALARMhandler);
  alarm(2);                     /* set alarm clock          */
  while (1)
    ;
  printf("All done");
}

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

#include  <stdio.h>
#include  <signal.h>
#include <stdio.h>

void  ALARMhandler(int sig)
{
  puts("helllllllllllo")     ;
  alarm(2);
}

int main(int argc, char *argv[])
{
signal(SIGALRM, ALARMhandler);
  alarm(2);                     /* set alarm clock          */
  while (1){
    puts("while") ;
    sleep(2);
    }
  printf("All done");
}
  ــــــــــــــــــــــــــــخروجی

while
helllllllllllo
while
helllllllllllo
while
helllllllllllo
while
helllllllllllo
.....
به همین شکل ادامه پیدامیکنه

بیعنی این تابع خودش مثه نخ هست و موازی اجر میشه پس جای نگرانی نیست و نمیخاد به دنبال نخ ها برید خود ش کار نخ رومیکنه

پاسخ شما
برای ارسال پاسخ خود وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....