2012-09-25 30 views
10

Tôi đang làm việc trên ứng dụng MDI được viết bằng C++ Builder 2010. Khi cửa sổ con ở trạng thái tối đa, ứng dụng sẽ tiêu thụ 100% thời gian CPU ở chế độ chờ.Ứng dụng MDI tiêu thụ 100% cpu ở chế độ chờ

Tôi đã sử dụng hồ sơ 'Rất buồn ngủ' và nó cho thấy chức năng Sd_childFinalize đang sử dụng 99% tài nguyên CPU nhưng tôi không thể tìm thấy nó trong mã của mình. sd_Child.cpp là đơn vị C++ trong đó lớp mẫu con MDI được định nghĩa. Tôi chỉ tìm thấy biểu tượng @@[email protected] trong tệp thi hành. Hãy giúp tôi hiểu cách gỡ lỗi vấn đề này.

+0

Tại sao bạn vẫn sử dụng MDI trong năm 2012? Nó đã bị phản đối từ rất lâu rồi. –

+0

Tôi đã nhìn thấy điều này trước đây ở Delphi. Trên đỉnh đầu tôi không thể nhớ lại bất kỳ chi tiết nào. –

+0

'sd_Child.cpp' không phải là một phần của C++ Builder chuẩn cài đặt trên máy tính của tôi, và giống như' MDI' dùng để chỉ 'Giao diện nhiều tài liệu',' SDI' thường đề cập đến 'Giao diện tài liệu đơn', sẽ không một phần của khung ứng dụng MDI. Bạn đang sử dụng một gói của bên thứ ba của một số loại? –

Trả lời

13

Điều này dường như là một vấn đề đã biết liên quan đến các hành động và cách chúng được cập nhật trong trình xử lý ứng dụng nhàn rỗi. Báo cáo QC sau đây mô tả kịch bản của bạn: http://qc.embarcadero.com/wc/qcmain.aspx?d=12706

Giải pháp cho vấn đề của bạn, theo báo cáo QC, là để thiết lập các TApplication.ActionUpdateDelay tài sản cho một giá trị lớn hơn 0.

Những gì tôi muốn biết là tại sao sự hiện diện của một biểu mẫu máy khách tối đa dẫn đến DoActionIdle của VCL được gọi trong một vòng lặp bận. Có lẽ việc thực hiện xử lý OnUpdate của một hành động dẫn đến một thông điệp xếp hàng đợi khác và một chu kỳ nhàn rỗi khác, v.v. Tôi đã nghĩ rằng đối phó với điều đó sẽ là cách tốt nhất để giải quyết vấn đề này, nhưng có lẽ thật khó để đạt được.

+0

Lưu ý rằng [QualityCentral hiện đã bị tắt] (https://community.embarcadero.com/blogs/entry/quality-keeps-moving-forward), vì vậy bạn không thể truy cập vào liên kết 'qc.embarcadero.com' nữa . Nếu bạn cần truy cập vào dữ liệu QC cũ, hãy xem [QCScraper] (http://www.uweraabe.de/Blog/2017/06/09/how-to-save-qualitycentral/). –