30/09/2018, 16:15

Câu lệnh để dừng chương trình trong 2s?

các anh cho em hỏi,trong vòng lặp for em muốn in ra màn hình từ 1 đến 100 nhưng cứ sau 2s mới in một số thì làm ntn?

Nguyễn Minh Dũng viết 18:26 ngày 30/09/2018

Câu lệnh để dừng chương trình phụ thuộc vào hệ điều hành. Thế nên nếu em viết trên Windows, anh nghĩ là em dùng Windows, em phải sử dụng thư viện windows.h.

Sau đó em sử dụng lệnh Sleep như bên dưới.

#include <windows.h>
#include <stdio.h>

int main() {
    printf( "starting to sleep...\n" );
    Sleep( 3000 );   // sleep three seconds
    printf( "sleep ended\n" );
}

Sleep nhận vào milisecond chứ không phải second. Có nghĩa là em muốn chờ 2s, em phải viết

Sleep(2000)
X viết 18:18 ngày 30/09/2018

Đếm từ 1 đến 100. bạn có thể làm như sau:

#include <iostream>
#include <time.h>
void wait(int seconds)
{
	clock_t ew;
	ew = clock() + seconds * CLOCKS_PER_SEC;
	while (clock() < ew) {}
}
int main()
{
	int n;
	for (n = 1; n>0; n++)
	{
		if (n < 101) // đếm đến 100
		{
			printf("%d\n", n);
			wait(2); // 2 giây.
		}

	}
	return 0;
}
Nguyễn Minh Dũng viết 18:17 ngày 30/09/2018

Hàm wait của @david15894 coi bộ tốn CPU để ngồi chờ và đếm clock.

while (clock() < ew) {}

Hàm Sleep hình như sử dụng Windows Software Interrupt hoặc System Call để gọi chương trình của mình dậy sau một khoảng thời gian xác định. Thế nên trong thời gian sleep, chương trình của mình sẽ rơi vào idle,hoặc vào waiting list, không thực sự sử dụng CPU.

Kudo Vĩ viết 18:16 ngày 30/09/2018

Cho mình hỏi, đoạn này dùng để làm gì vậy ạ?

while (clock() < ew) {}

Phan Hoàng viết 18:17 ngày 30/09/2018

Hàm đó không làm gì mà bạn, vì nó sẽ chờ để ngồi đếm xung CPU

clock_t ew; //khai báo xung CPU sau 2s
ew = clock() + seconds * CLOCKS_PER_SEC; //=xung hiện tại + 2s*số xung trong 1s
while (clock() < ew) {
 //xung ban đầu giả sử là 0 nhé
 //giả sử sau 2 xung, CPU sẽ nhảy vào đây (xung 1000 lần 1s nhé)
 //lúc này clock() = 2, vẫn nhỏ hơn 2x1000 (ew)
 //mất 1 xung kiểm tra, quay lại, lúc này clock() = 3 (2+1)
 //lại kiểm tra tiếp, khoảng 2000 lần kiểm tra thì out ra (tức là đã trải qua 2s)
 //chú ý: giả sử cho dễ hiểu thôi nhé, chứ CPU có thể tính toán vài triệu command 1s
}
Kudo Vĩ viết 18:18 ngày 30/09/2018

giải thích rất chi tiết, cảm ơn rất nhiều ạ!

Bài liên quan
0