易截截图软件、单文件、免安装、纯绿色、仅160KB

C# C/S程序出错:ContextSwitchDeadlock is detected

今天在VS2005调试一个C# C/S程序,当通过RFC与SAP连接时间过长时,出现此错误,在网上找到解决办法。
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互操作时保证对象的线程安全性,内部细节不详。


相关文档:

C语言高级测试:为C程序员准备的0x10个最佳问题

整个测试遵循以下的约定:
u
      
假定在所有的程序中必须的头文件都已经被正确包含。
考虑如下的数据类型:
u
      
char

1
个字节
u
      
int

4
个字节
u
      ......

C和C++之间的不同

(注,本文是翻译的http://www.cprogramming.com/
上的文章 Where C and C++ Differ

C++基于C,也保留了C的大部分特性。但是在源码级上有些地方是与C不兼容的。
C程序员使用C++时的陷阱
从 void* 的隐式分配
不能从 void* 隐式地分配到其他任何类型。例如,下面的代码在C中是非常有效的。
    in ......

Tricky C questions



以下是几个棘手的
C 问题, 很难做, 看看自己会做几个?
How do you write a program which produces its own source code as its output?
How can I find the day of the week given the date?
Why doesn’t C have nested functions?
What is the most efficient way to count the num ......

(转)学习c/c++的50个好网站

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。
1、http://snippets.dzone.com/tag/c/ --数以千计 ......

C与shell混合编程


在linux上写程序、做网管的人,或多或少都会几种脚本。脚本语言灵活的变量类型、强大的正则表达式处理能力,再加上linux系统本身的管道、重定向以及丰富的命令行工具,让你编程起来游刃有余。
  而C语言固然有种种优势,但不可否认,很多场合下,用脚本语言更为方便,比如我们将举例说明的对配置文件的处理。
  先 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号