TCFADODBStorage.OpenConnection:
Boolean
//线程里打开ADOConnection,在XP下切换输入法程序会死掉
//原因:ADO自动创建一个ADODB.AsyncEventMessenger窗口,然后会有一个对应的IME窗口,但线程里没有消息循环
//
XP下输入法切换时会SendMessage给IME窗口并等待返回,IME窗口并不会处理消息,造成死锁
//这个函数把线程里的IME窗口释放掉,切换输入法时就不会有消息过来了
procedure
_FreeIMEWindow
const
IME_WINDOW_CLASS
=
'IME'
IME_WINDOW_TEXT
=
'Default
IME'
var
h
:
HWND
pid
:
DWORD
dh
:
HWND
begin
h
:=
FindWindow(IME_WINDOW_CLASS,
IME_WINDOW_TEXT)
while
IsWindow(h)
do
begin
if
GetWindowThreadProcessId(h,
pid)
=
GetCurrentThreadId
then
dh
:=
h
else
dh
:=
0
h
:=
FindWindowEx(0,
h,
IME_WINDOW_CLASS,
IME_WINDOW_TEXT)
if
dh
<>
0
then
DestroyWindow(dh)
end
endbegin
try
FConnection.ConnectionString
:=
ConnectionString
FConnection.Connected
:=
True
if
GetCurrentThreadId
<>
Global.MainThreadID{全局的主线程ID,如果是主线程,不需要Free}
then
_FreeIMEWindow
except
on
E:
Exception
do
FLastErrorMessage
:=
e.Message
end
Result
:=
FConnection.Connectedend
[解决办法]
线程中要加入消息条件退出语句,这样才不能无限循环(假死)。
本文来自:读书人网(http://www.reader8.cn/)原文链接:http://www.reader8.cn/jiaocheng/20130711/2169937.html
这种情况有以下几点可能:1.鼠标本身驱动有问题,导致切换后无法兼容运行,需要用驱动精灵检测修复一下。
2.电脑本身系统问题,界面切换存在系统多线程问题,无法正常切入,说明系统兼容性问题,可以考虑更换系统。
3,系统内存不足,也会导致无法正常加载硬件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)