如何阻止调用C ++ DLL的C#线程

时间:2014-06-30 14:01:42

标签: c# c++ multithreading dll

我的应用程序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之后被调用时。

0 个答案:

没有答案