建立异常类 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
}}