Thêm "ReleaseDC(dc);" vao cuối OnTimer() đi bạn! ^_^!
Mình đang gặp 1 vấn đề trong việc quản lý bộ nhớ của chương trình. Đây là một chương trình có sử dụng hàm SetTimer() và KillTimer() trong MFC để tạo 1 quả bóng di chuyển trong 1 khung. Rắc rối ở đây là khi mở Task Manager lên thì Tài nguyên dành cho chương trình liên tục tăng lên (nhấn nút Stop, thực thi hàm KillTimer thì nó dừng lại, nhấn Start, thực thi hàm SetTimer nó lại tăng lên), đến 1 lúc nào đó hệ thống sẽ báo lỗi.
Ai có thể xem và chỉnh giùm mình đoạn code (trong file: CMyFrame.cpp và CMyFrame.h) dc ko. Xin cảm ơn !!!
Source: http://www.freewebtown.com/file/test/Move1.rar
I know... nothing
![]()
Thêm "ReleaseDC(dc);" vao cuối OnTimer() đi bạn! ^_^!
Code cậu lỗi nhiều quá, tui cũng không biết sữa làm sao nữa. Chỉ gợi ý cậu như sau:
- Có Get thì phải có Release
- Có SelectObject thì cũng phải SelectObject lại cho object cũ.
- Đang SelectObject thì không được delete object, phải deselect xong mới được delete.
App cậu sẽ làm cả Windows sụm bà chè sau 1 ngày run liên tuc.
Tìm trên Internet tool BoundsChecker cho VC++, down về và chịu khó đọc help, tập dùng nó đi. Sẽ có ích cho cậu mãi mãi.
Cám ơn anh N về thông tin rất bổ ích. Em tuy ít code C++ cũng sẽ xem thử thế nàoTìm trên Internet tool BoundsChecker cho VC++, down về và chịu khó đọc help, tập dùng nó đi. Sẽ có ích cho cậu mãi mãi..
Link down trực tiếp:
P/s: hic, giá của nó cũng ko rẻ tí nào, ver cho C là $299, ver cho C++ là $99
Keep moving forward!
... Retired ...
Cảm ơn các bạn rất nhiều vì đã chỉ dẫn cho mình hết sức tận tình. Mình chỉ là 1 newbie của MFC, qua các lỗi mà các bạn chỉ ra mới thấy là nghiên cứu MFC chưa tới đâu cả :(.
- Mình ko hỉu lắm câu đầu tiên của bạn, SelectObject cho object cũ là sao, bạn có thể nói rõ cho mình dc ko.- Có SelectObject thì cũng phải SelectObject lại cho object cũ.
- Đang SelectObject thì không được delete object, phải deselect xong mới được delete.
- Còn ở câu thứ 2, mình ko thấy phương thức nào có tên là Deselect như bạn nói cả, chỉ thấy DelectObject thôi.
Mong các bạn tiếp tục giúp đỡ mình.
I know... nothing
![]()
- SelectObject lần đầu: hOld = SelectObject(hNew);
- Deselect: SelectObject(hOld);
Deselect xong mới DelectObject(hNew);
hOld là GDI handle của Windows, default tạo sẵn. Không được đụng tới thằng này.
Cảm ơn bạn nhiều nha.
Nhân đây cho mình hỏi một chút. Nếu muốn học MFC thì cách nào là tốt nhất? Học sử dụng Wizard (mình thấy mấy quyển sách toàn dạy kiểu này) hay là tạo từng file, rồi gõ từng đoạn code (mình thấy ít sách dạy kiểu này) ? Mình thích kiểu thứ 2 nhưng ko biết cách học này có thật sự "chuẩn" và cũng ko biết học như vậy có phải là cách tốt nhất ko nữa. Bạn có thể chia sẽ ít kinh nghiệm trong vấn đề này cho mình dc ko?
I know... nothing
![]()
Hèn gì nhìn code MFC của cậu thấy "quái, MFC sao kỳ vậy". Trước mắt là newbie thì cứ Wizard mà dùng, tập debug vào tận trong source của MFC, C RTL để hiểu xem chúng làm việc ra sao. Sau này sẽ từ từ hiễu rõ MFC rồi mới modify nó.
Cho mình thắc mắc chúc xíu nữa nha. Bạn có đề cập đến "C RTL", có thể nói rõ cho mình chút xíu dc ko??? (hihi, đúng là mình còn newbie quá, càng nói, càng ko biết)
I know... nothing
![]()
C RTL: C Runtime Library function: Các hàm thư viện của C