我正在为我的游戏创建线程。但是我发现,如果按下关闭按钮,或者任务被终止,我将无法正常完成工作,从而无法在程序中分配所有我需要的资源。
我发现存在Close处理程序,但是给出的示例对我来说是一个未知的魔术,因为我需要在ANSI-C中创建类似的东西。
class YourClassName extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
}
componentDidUpdate() {
}
render() {
const { classes } = props;
return (
<div className={classes.root}>
<Grid container spacing={24}>
<Grid item xs={12} sm={6}>
<Paper className={classes.paper}><Swappable id='1' content={<DataTable/>}/></Paper>
</Grid>
<Grid item xs={12} sm={6}>
<Paper className={classes.paper}> <Swappable id='2' content="#2"/></Paper>
</Grid>
<Grid item xs={12} sm={6}>
<Paper className={classes.paper}><Swappable id='3' content="#3"/></Paper>
</Grid>
<Grid item xs={12} sm={6}>
<Paper className={classes.paper}><Swappable id='4' content="#4"/></Paper>
</Grid>
</Grid>
</div>
);
}
}
const mapStateToProps = state => {
return {
something: state.something,
something2: state.something2,
};
}
const YourClassNameContainer = connect(mapStateToProps)(YourClassName);
export default YourClassNameContainer;
我知道Winapi具有Mutex和条件变量,但是我对std :: atomic等效项一无所知。
我有这个线程启动函数和内部线程函数GameThread,我现在检查了一个常规的bool变量m_bAtomActive。
static BOOL CloseHandler(DWORD evt)
{
if (evt == CTRL_CLOSE_EVENT)
{
m_bAtomActive = false;
// Wait for thread to be exited
std::unique_lock<std::mutex> ul(m_muxGame);
m_cvGameFinished.wait(ul);
}
return true;
}
我不擅长线程,如何正确完成游戏工作?
所有其他详细信息将在评论或聊天中提供。
UPD:第一件事情似乎很简单,在关闭处理程序中使用此行即可解决
void Start(void* _self)
{
DWORD dwThreadID;
HANDLE hThread;
struct c_class* this = _self;
this->m_bAtomActive = true;
hThread = CreateThread(
NULL,
0,
&GameThread,
_self,
0,
&dwThreadID);
WaitForSingleObject(hThread, INFINITE);
}
但是第二和第三仍在质疑中。创建它们的原因可能是因为CloseHandler在销毁应用程序之前将其杀死,但我不确定。