易截截图软件、单文件、免安装、纯绿色、仅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中括号优先级的思考

问题源于论坛的一道题目:
http://topic.csdn.net/u/20100216/21/ec98464e-a47e-4263-bb1c-a001e130ba87.html
下面是问题:
设int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
答案为什么是:8,8
问题的焦点也落在printf执行的问题上,到底先执行谁,后执行谁, 还有部分 ......

C和C++之间的不同

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

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

C程100例

1/有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
==============================================================
2/企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
   于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 ......

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

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

C/C++语言实现动态数组

C/C++语言实现动态数组
C数组的小问题
     这里说的动态数组是可以根据需要动态增长占用内存的数组,比如程序初始分配了100个元素,可是运行了一段时间后区区100个空间不能满足了,现在需要400个,怎么办呢;那肯定需要再额外分配300个。
     C语言有realloc()函数来解决空间 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号