Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何停止调用C++;动态链接库 我的应用程序C调用一个运行缓慢的C++ DLL。 所以我在线程中调用dll,一切正常_C#_C++_Multithreading_Dll - Fatal编程技术网

C# 如何停止调用C++;动态链接库 我的应用程序C调用一个运行缓慢的C++ DLL。 所以我在线程中调用dll,一切正常

C# 如何停止调用C++;动态链接库 我的应用程序C调用一个运行缓慢的C++ DLL。 所以我在线程中调用dll,一切正常,c#,c++,multithreading,dll,C#,C++,Multithreading,Dll,但是,如果用户想要停止线程,我如何停止线程呢?我说不出dll 停止。我发现的唯一方法是使用一个易失性bool并定期检查它的值 问题在于,Boolean值仅在几次之后或在显示MessageBox之后更改 # C++ CancelMesh()在接收线程执行长操作时调用,因此它将被存储以供以后使用(在队列中,等待处理) 如果线程的操作完成,它将返回并调用CancelMesh(),并立即处理它 我需要一种方法来简单地执行CancelMesh()方法,当它不是在一段时间后或在MessageBox之后调用时

但是,如果用户想要停止线程,我如何停止线程呢?我说不出dll 停止。我发现的唯一方法是使用一个易失性bool并定期检查它的值

问题在于,
Boolean
值仅在几次之后或在显示
MessageBox
之后更改

#

C++

CancelMesh()
在接收线程执行长操作时调用,因此它将被存储以供以后使用(在队列中,等待处理)

如果线程的操作完成,它将返回并调用
CancelMesh()
,并立即处理它


我需要一种方法来简单地执行
CancelMesh()
方法,当它不是在一段时间后或在
MessageBox

之后调用时,您确定延迟是由于消息框造成的吗?可能延迟是因为“ContinueProcessing()”方法需要时间,并且每隔一段时间只检查一次布尔值?不,“ContinueProcessing()”只是我需要做的一个简单示例,但我在许多地方测试了该布尔值。我们的代码很好。如果你调用<代码> CuffelMe丝丝b>代码,那么,在适当的时候,当C++代码检查标志的值时,线程将能够中止。其实很简单。@moez问题不在于你的任务和它的行为,问题在于这里没有人不能理解你的应用程序中正在发生什么和应该发生什么-。您应该更详细地描述您的系统,并至少发布部分工作代码或等效代码。无意冒犯,只是你的应用对我来说还是个谜。
 public void AbortMesh()
            { 
                if (currMeshStruct.Value.MeshThread != null && currMeshStruct.Value.MeshThread.IsAlive)
                {                
                    MeshCreator.CancelMesh();
                }
            }
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();
        }      
    }

}