Ghi log trong C++

Trong lúc làm đồ án có động đến việc ghi log để phục vụ debug nên phải viết ra cái tiện ích nho nhỏ này, thấy nó cũng hay nên chia sẻ cho các bạn đọc chơi. Việc ghi log trong C++ thì dự là có nhiều thư viện hổ trợ rồi, cơ mà xài “cây nhà lá vườn” vẩn thích hơn. Log chỉ ghi ra khi ở mode debug và tự động “biến mất” ở mode release vì thế sẽ tối ưu khá nhiều cho performance. Trong tiện ích này mình sử dụng các macro để ghi log, với mode relase thì nó sẽ bị remove hoàn toàn(bước tiền biên dịch) trước khi code chính thức đc biên dịch.

Phiên bản hiện tại hổ trợ ghi log ra màng hình console, file và ngay trên IDE(just win32). Tùy vào từng mục đích sử dụng mà có thể thay đổi đầu ra log cho phù hợp.

Class C++ và CreateThread Win32 API

Làm thế nào để thực thi một hàm non-static của class trong 1 thread? Nếu bạn muốn tìm hiểu thread là gì thì có thể đọc thêm ở đây.

Như các bạn đã biết, hàm CreateThread cần biết địa chỉ của hàm mà nó sẽ thực thi khi thread chạy(The starting address for a thread) và dĩ nhiên hàm này phải là hàm tỉnh(static function), bạn phải khai báo static nếu là class member hoặc khai báo bên ngoài class như C style.

Cách khác để sao chép hoặc clear nội dung thực thể trong C++

Như đã biết thì việc sao chép nội dung của các thực thể của class trong C++ được thực hiện bằng copy contructor hoặc toán tử gán, đối với một số lớp đơn giản thì ta có thể không cần thực thi lại tụi này làm gì. Đối với các lớp có chứa con trỏ thì hầu hết trường hợp ta phải định nghĩa lại để có thể copy vùng nhớ mà con trỏ trỏ đến. Trong bài viết này mình không đi cụ thể vào cách xây dựng copy constructor hay nạp chồng toán tử gán, mình sẽ hướng dẩn các bạn một cách khác để copy nội dung của thực thể này sang thực thể khác mà không cần sử dụng đến copy constructor hay toán tử gán cũng như cách clear nội dung các trường của một thực thể một cách nhanh chóng. Dĩ nhiên cách này vẩn không thể thay thế hoàn toàn được phương pháp nạp chồng toán tử gán hay thực thi lại copy constructor, nó chỉ đơn giản là cung cấp một giải pháp khác cho bạn. Chú ý rằng các phương pháp này sẽ không thể sử dụng nếu trong class có định nghĩa các virtual method hoặc chứa các trường là con trỏ.

Số phận đã đưa đẩy tôi như thế nào

Một món quà nhỏ giành cho một người bạn "đặc biệt" 😉

Tôi lớn lên ở một vùng núi xa xôi hẻo lánh mà người ta mới nghe tên đã nghỉ ngay đến voi, khỉ, rừng rú các thứ. Vì thế cũng chẳng ngạc nhiên khi tụi bạn đại học mới gặp đã hỏi mấy câu tương tự, tôi lúc nào cũng chỉ cười và bảo “ở chổ tau người ta dùng voi để đi lại chứ không phải dùng xe máy như ở đây đâu, nhiều lúc đường KẸT VOI tau phải đu dây để đi học đấy”. Chẳng ai tin đó là sự thật và tôi cũng chẳng quan tâm rằng người ta có tin điều đó không, mà có lẻ ở đó lúc xưa người ta cũng hay cưỡi voi cũng nên vì lúc tôi còn được mẹ bồng cho ăn thì ở đó còn rừng rú lắm, giờ cũng hơn 20 mùa mưa nắng rồi. Còn đu dây thì chỉ có trong film thôi chứ rừng ở đây mà đu là răng môi lẩn lộn như chơi.

Một cách khác để cấp phát bộ nhớ động trong C++

Như các bạn đã biết thì việc cấp phát bộ nhớ động sẽ tốn một khoản thời gian và cũng có thể sẽ xảy ra trường hợp việc cấp phát thất bại vì không đủ bộ nhớ chẳng hạn. Để giải quyết vấn đề này ta có thể sử dụng cách cấp phát một vùng lớn bộ nhớ ngay từ ban đầu, sau đó ta chỉ việc trỏ đúng vị trí và ép kiểu nó sang các kiểu tương ứng là được. Ví dụ thế này: bạn cần mua một số mảnh đất để trồng trọt, việc mua đất sẽ tùy vào mùa màng và thời tiết mà bạn sẽ quyết định mua thêm để trồng các loại cây khác nhau hoặc bán bớt đất. Việc mua và bán đất dĩ nhiên sẽ làm bạn tốn một khoản thời gian để làm giấy tờ các kiểu, có khi đất trống không sẵn có để bạn mua nữa. Để giải quyết vấn đề này, bạn quyết định mua luôn một vùng đất lớn, khi bạn muốn trồng một loại cây A nào đó, bạn chỉ việc xác định vị trí trống còn lại trên vùng đất đã mua kèm theo tổng kích thước cần thiết để trồng loại cây A, từ đó bạn đánh dấu khu đất đó là để trồng cây A. Cứ như vậy bạn có thể xác định các khu đất để trồng các loại cây khác dựa trên vùng đất lớn đã mua.

Pagination


Copyright © 2022. All rights reserved.