Hiện tượng CPU chiếm 100% với vòng lặp vô tận

Chào các bạn

Mình sử dụng vòng lặp while(true) lặp vô hạn, khi click chuột thì mới thoát khỏi vòng lặp. Cách này gây ra hiện tượng CPU lúc nào cũng chiếm 80% - 100%.
Mình có tìm hiểu là dùng Sleep và delay để khắc phục tình trạng trên, nhưng họ cũng nói luôn là cách này chỉ chữa cháy, chứ nó không tối ưu.

Vậy ngoài cách dùng Sleep và delay ra thì còn cách nào khác không ạ.

Mình xin cảm ơn.

không dùng while true nữa là được rồi

4 Likes

Không biết mình có hiểu sai không ta. Chứ đã cho chạy vòng lặp vô tận, thì nó chạy hoài cho tới khi treo máy luôn, đó là chuyện bình thường mà ta.

2 Likes

Trường hợp của mình sử dụng vòng lặp vô hạn để check tọa độ chuột mỗi khi di chuyển chuột, sau đó từ tọa độ lấy ra được đem kiểm tra tiếp nếu thỏa điều kiện thì hiển thị gợi ý. (Mình dùng chuột để gợi ý nước đi của con cờ trong game)

Đây là code

int getmouse()
{
	int page = 0;
	int movex, movey;

	while (true)
	{
		row_input		= mousey() / SizeOfCell;
		column_input	= mousex() / SizeOfCell;

		if (ismouseclick(WM_LBUTTONDOWN)){
			getmouseclick(WM_LBUTTONDOWN,movex,movey);
			return 0;
		}

		if(mousey() <= (8 * SizeOfCell) && mousex() <= (8 * SizeOfCell)){
			setactivepage(page);
			setvisualpage(1 - page);
			cleardevice();

			for(int i = 0; i < 8; ++i){
				for(int j = 0; j < 8; ++j){
					table_temp[i][j] = table[i][j];
				}
			}

			check_sug_right();
			check_sug_left();
			check_sug_up();
			check_sug_down();
			check_sug_down_left();
			check_sug_down_right();
			check_sug_up_left();
			check_sug_up_right();

			showtable(table);
			show_count();
			page = 1 - page;	
		}
	}

	return 0;
}
1 Like

Sao không bắt sự kiện khi mouse di chuyển hả bạn?

4 Likes

Mình thấy trong C có hàm mousex(), mousey() khi di chuyển chuột nó nhận tọa độ rồi nên không bắt sự kiện

2 Likes

Không dùng sự kiện thì thả cái sleep vào là được.

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?