建立异常类 error.hpp
#ifndef BANK_ERROR_HPP
#define BANK_ERROR_HPP
#include <exception>
namespace bank {
class error : public std::exception
{
public:
explicit error(const char*) throw();
virtual ~error(void) throw();
virtual const char* what(void) const throw();
private:
const char* message;
};
} /* namespace bank */
#endif
使用方法如下:
#include <error.hpp> namespace { struct thread { static HANDLE& get(void) { static HANDLE handle; return handle; } static DWORD WINAPI execute(void* data) { static_cast<bank::detail::thread*>(data)->run(); return 0; } }; } namespace bank { namespace detail { thread::~thread(void) { CloseHandle(::thread::get()); } void thread::yield(void) { Sleep(0); } void thread::wait(void) { WaitForSingleObject(::thread::get(), INFINITE); } #if defined(max) #undef max #endif void thread::start(void) { ::thread::get() = CreateThread(NULL, (std::numeric_limits<uint16_t>::max() + 1) * 2, ::thread::execute, this, STACK_SIZE_PARAM_IS_A_RESERVATION, NULL); if (::thread::get() == NULL) { throw error("Could not create collector thread"); } } #define max(a, b) a > b ? a : b }}