zoukankan      html  css  js  c++  java
  • Tips&Tricks系列七:ContextSwitchDeadlock is detected

    VS2008上的一个程序,通过Oracle.DataAccess.dll执行drop user cascade操作,我在sqlplus执行此操作大约需要一分钟左右时间,当我在VS2008中debug启动此程序时,一直接收到“ContextSwitchDeadlock is detected”消息,操作无法进行下去。

    MSDN的解释一如即往地专业并且令人费解:
    “如果在试图进行COM上下文转换期间检测到一个死锁,则将激活ContextSwitchDeadlock托管调试助手 (MDA)。 ”

    “原因很可能是单线程单元(STA)线程不发送消息。STA线程或者等待而且不发送消息,或者执行一个长时间的操作而且不允许发送消息队列。”

    我没看出这程序跟COM有什么关系。看了半天,只看到“长时间的操作”貌似还沾点边,解决的方法倒是简单,Debug->Exceptions->Managed Debugging Assistants->ContextSwitchDeadlock,钩除“Thrown”项的复选框。

    BTW,
    1)COM,Component Object Model,它实际是一类软件开发方式。而COM组件顾名思义是按这种方式开发出来的软件/模块,看看Project->References->Add References->COM下列出的组件。

    2)单线程单元(STA):当你新建一个WindowsForm项目,在入口Main()方法上可以看到标识的属性,STAThread说明应用程序的 COM 线程模型是单线程单元,一般出现在Main方法前。大意是在与COM互操作时保证对象的线程安全性,内部细节不详。

  • 相关阅读:
    Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码
    ODS与DW之间的关系
    如何使用Hive&R从Hadoop集群中提取数据进行分析
    CentOS6.5下实现R绘图
    Util.FSUtils: Waiting for dfs to exit safe mode
    Grafana邮件报警
    CentOS7安装Grafana(Yum)
    CentOS7安装Node_exporter(二进制)
    CentOS7安装Prometheus(二进制)
    linux查看进程内存占用
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/1568477.html
Copyright © 2011-2022 走看看