Tôi đang sử dụng QueryPerformanceCounter với thời gian một số mã. Tôi đã bị sốc khi mã bắt đầu báo cáo thời gian rõ ràng là sai. Để chuyển đổi các kết quả của QPC vào thời gian "thực" bạn cần phải chia tần số trở về từ QueryPerformanceFrequency, vì vậy thời gian trôi qua là:Tần số xung nhịp CPU và do đó QueryPerformanceCounter sai?
Thời gian = (QPC.end - QPC.start)/QPF
Sau khởi động lại, tần số QPF thay đổi từ 2,7 GHz thành 4,1 GHz. Tôi không nghĩ rằng tần số phần cứng thực tế thay đổi khi thời gian đồng hồ treo tường của chương trình đang chạy không thay đổi mặc dù thời gian báo cáo bằng cách sử dụng QPC đã thay đổi (nó giảm 2,7/4,1).
MyComputer-> Properties cho thấy:
Intel (R) Pentium (R) 4 CPU 2.80 GHz; 4,11 GHz; 1,99 GB RAM; Mở rộng địa chỉ vật lý
Ngoài điều này, hệ thống có vẻ hoạt động tốt.
Tôi sẽ thử khởi động lại để xem sự cố có bị xóa hay không, nhưng tôi lo ngại rằng các bộ đếm hiệu suất quan trọng này có thể trở nên không hợp lệ mà không cần cảnh báo.
Cập nhật:
Trong khi tôi đánh giá cao những câu trả lời và đặc biệt là các liên kết, tôi không có một trong các chipset bị ảnh hưởng cũng không để tôi có một chiếc đồng hồ CPU mà thay đổi bản thân. Từ những gì tôi đã đọc, QPC và QPF dựa trên bộ đếm thời gian trong bus PCI và không bị ảnh hưởng bởi những thay đổi trong đồng hồ CPU. Điều kỳ lạ trong tình huống của tôi là FREQUENCY được báo cáo bởi QPF đã thay đổi thành giá trị không chính xác và tần số thay đổi này cũng được báo cáo trong MyComputer -> Properties mà tôi chắc chắn không viết.
Khởi động lại đã khắc phục sự cố của tôi (QPF hiện báo cáo tần suất chính xác) nhưng tôi cho rằng nếu bạn định sử dụng QPC/QPF, bạn nên xác thực nó trước một bộ đếm thời gian khác trước khi tin cậy.
SpeedStep đang hoạt động? – vladr
QPC và QPF nổi tiếng không đáng tin cậy, tài liệu MSDN cố ý gây hiểu nhầm (MS cho rằng nếu giá trị sai, đó là lỗi của nhà sản xuất BIOS, trong khi vẫn tuyên bố điều đó là có thể thực hiện được ... nhưng tôi chắc chắn rằng sai bởi vì nó, người dùng sẽ đổ lỗi cho bạn, chứ không phải nhà sản xuất BIOS) – speeder