我的应用程序C#调用运行缓慢计算的C ++ DLL。 所以我在一个线程中调用了dll,并且一切正常。
但是如果用户愿意,我怎么能停止线程呢?我不能告诉dll 停止。我找到的唯一方法是使用挥发性bool并定期检查它的价值。
问题是Boolean
值仅在一段时间后或在显示MessageBox
后发生了变化。
C#
public void AbortMesh()
{
if (currMeshStruct.Value.MeshThread != null && currMeshStruct.Value.MeshThread.IsAlive)
{
MeshCreator.CancelMesh();
}
}
C ++
public class MeshCreator
{
private:
volatile BOOL m_StopMesh;
...
}
STDMETHODIMP MeshCreator::CancelMesh(void)
{
this->m_StopMesh = TRUE;
return S_OK;
}
void MeshCreator::ProcessMesh(void)
{
Int32 processedParts = 0;
while(processedParts != totalPartsToProcess)
{
ContinueProcessing(processedParts);
processedParts++;
if (this->m_StopMesh)
{
// ExitProcess();
}
}
}
CancelMesh()
在接收线程执行长操作时被调用,因此它将被存储以供稍后(在队列中,等待处理)。
如果线程已完成其操作,它将返回并调用CancelMesh()
,并立即处理它。
我需要一种方法来简单地执行CancelMesh()
方法,当它在一段时间后或MessageBox
之后被调用时。