突然领悟到异常其实是中断。于是想到用异常来通知线程安全结束,就是不知道这样做的效率怎么样,据说catch exception很费时间。
#include "stdafx.h"
#include "windows.h"
#include "process.h"
struct param
{
param() : _signal(false) {}
void close_signal()
{
_signal = true;
}
bool if_close()
{
if(_signal)
{
throw 1;
}
return _signal;
}
private:
bool _signal;
};
unsigned int _stdcall thread_fun(void* lpvoid)
{
bool exit = false;
param* pm = static_cast<param*>(lpvoid);
do
{
try
{
printf("thread run\r\n");
exit = pm->if_close();
}
catch(...)
{
printf("\r\ncatch exception\r\n");
return 0;
}
}while(!exit);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
param param;
_beginthreadex(0,0,thread_fun,¶m,0,0);
Sleep(1000);
param.close_signal();
system("pause");
return 0;
}