回答
如果你只想要第二個精度。如果包含time.h
,則使用返回當前時間的time(0)
。
更新: 這期間20
秒打印在每一秒10
添加簡單的例子:
#include <time.h>
#include <stdio.h>
int main()
{
int a = 10;
int num = 20;
int c = time(0);
while(n--)
{
printf("%d\n", a);
while(!(time(0) - c));
c = time(0);
}
return 0;
}
不,我想在每1秒後打印一個變量。所以我們的程序如何知道1秒鐘過去了,以便它可以打印變量。 – piyush 2011-04-22 12:07:55
這裏'時間(0) - c'將是0(假),而目前的秒數正在進行。 您也可以在Windows中使用'Sleep()'和unix中的'sleep()'來在指定的時間內使您的程序休眠。 – 2011-04-22 12:12:34
使用time(0)
看到這個例子
/* timer.c */
#include <stdio.h>
#include <time.h>
void delay_sec(int seconds){
clock_t endwait;
endwait = clock() + seconds * CLOCKS_PER_SEC;
while (clock() < endwait) {}
}
int main (void){
time_t rawtime, ini_time, now;
struct tm *ptm;
time (&ini_time);
for(;;){
time (&rawtime);
//ptm = gmtime (&rawtime);
//printf ("%2d:%02d:%02d\n", ptm_2->tm_hour, ptm_2->tm_min, ptm_2->tm_sec);
now = rawtime - ini_time;
ptm = gmtime (&now);
printf ("%2d:%02d:%02d\n", ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
delay_sec(1);
}
return 0;
}
我相信你知道1000 Milliseconds
等於1 Second
。
#include <stdio.h>
#include <time.h>
#define mydelay 1000
void delay(int mseconds)
{
clock_t wait = mseconds + clock();
while (wait > clock());
}
int main()
{
int i=100;
while(1)
{
printf("%d\n",i);
delay(mydelay);
}
return 0;
}
如果所有你有興趣做的是打印變量的值在間隔一秒,使用time(2)
或clock(3)
在其他的答案可能就足夠了建議。一般來說,我不會推薦這些技術。
如果你的程序比較複雜,我建議你調查使用alarm(2)
或settimer(2)
功能在一秒鐘的時間間隔異步傳遞一個信號,你的應用程序。
下面的示例使用select(2)
,以便最小化與忙等待技術相關聯的CPU的使用率無限期地阻塞。阻塞select()
呼叫被中斷,並在信號被捕獲時返回。在SIGALRM
信號的情況下,print_variable
標誌被置位並且打印值爲variable
。
實施例1:使用alarm()
#include <signal.h>
#include <stdio.h>
#include <sys/select.h>
#include <unistd.h>
volatile unsigned int variable = 0;
volatile unsigned int print_variable = 0;
void alarm_handler(int signum)
{
variable++;
print_variable = 1;
alarm(1);
}
int main()
{
signal(SIGALRM, alarm_handler);
alarm(1);
for (;;)
{
select(0, NULL, NULL, NULL, NULL);
if (print_variable)
{
printf("Variable = %u\n", variable);
}
}
}
注:錯誤檢查從爲了簡化上述代碼刪去。
一個printf()
功能可能被稱爲SIGALRM
處理程序中,但在信號處理程序調用非重入函數一般不提倡。
一秒的超時也可以被傳遞到select()
,但如果它是由任何信號中斷,附加的邏輯是必要的,以確保所述一個第二超時的剩餘部分被兌現。幸運的是,在Linux上,select()
修改了超時值以反映未睡眠的時間量。這允許檢測到中斷情況,然後通過後續呼叫select()
完成超時。
例2:使用select()
#include <errno.h>
#include <stdio.h>
#include <sys/select.h>
volatile unsigned int variable = 0;
int main()
{
struct timeval tv;
int val;
for (;;)
{
tv.tv_sec = 1;
tv.tv_usec = 0;
do
{
val = select(0, NULL, NULL, NULL, &tv);
} while (val != 0 && errno == EINTR);
printf("Variable = %u\n", ++variable);
}
}
不要使用忙等待,因爲你已經有了100%的CPU使用率。 必須使用系統功能,其變成處理進入睡眠模式,例如select()
:
#include <stdio.h>
#include <sys/select.h>
void your_callback()
{
printf("%s\n", __FUNCTION__);
}
int main()
{
struct timeval t;
while (1) {
t.tv_sec = 1;
t.tv_usec = 0;
select(0, NULL, NULL, NULL, &t);
your_callback();
}
return 0;
}
一個簡單的例子,其打印變量a
的值對每1秒:
#include<stdio.h>
void main(void)
{
int a = 10;
while(a--)
{
printf("Value of a = %d\n", a);
sleep(1);
}
}
輸出:
a = 9的值 ...
a = 0的值
- 1. 在C++中需要幫助實現定時器/代碼行類
- 2. 需要幫助使用C#
- 3. 需要幫助的在Java中使用
- 4. Linux centos fontconfig幫助需要
- 5. 在C中需要數組的幫助#
- 6. Linux重定向幫助需要
- 7. 需要幫助在wxPython中使用self.MemoryDC
- 8. 在mac中使用F_NOCACHE需要幫助
- 9. 在C#和SQL中需要幫助
- 10. 在C中需要Linq過濾幫助#
- 11. 在C#OCR中需要幫助
- 12. 在c文件中需要幫助make
- 13. 在需要Freemarker幫助時使用XPages
- 14. 在使用MySqlTransaction時需要幫助
- 15. 在javascript中需要幫助
- 16. 在Java中需要幫助
- 17. 幫助需要在node.js中
- 18. 在NSMutableArray中需要幫助!
- 19. 在Perl中需要幫助
- 20. 在java中需要幫助定位
- 21. C#中的打磚塊,需要幫助
- 22. 在Rails中需要時區幫助ActiveRecord
- 23. 需要幫助在ls -ltr linux bash
- 24. 需要幫助的C#
- 25. 需要幫助的C++
- 26. 需要關於在C++中使用結構模板的幫助
- 27. 需要在C中使用timeval結構的幫助
- 28. 在C++中需要使用OSX目錄的幫助
- 29. 需要幫助使用C++類繼承
- 30. 使用C#FindControl需要幫助
我建議你先做一些努力工作。 – 2011-04-22 12:11:52