看板Programming
标 题Win32 waiting/thread 一个奇怪的问题
发信站无名小站 (Mon Jul 24 04:35:51 2006)
转信站ptt!ctu-reader!ctu-gate!ctu-peer!news.nctu!netnews.csie.nctu!wretch
问题简化以後如下:
============================================================
有个对话视窗程式, 有
[Start],
[Hello] 两个按键
[Start] 这个按钮会去呼叫一个 DLL Api,
而这个Api会等很~久之後才会return
(这个 DLL 是厂商提供的,我不清楚他内部怎麽实作)
OnButtonStart()
{
result =
SomeApiInDLL();
// 这行会等很久才return
// 是在等一个硬体的sensor反应
if (result)
MessageBox("TRUE");
else
MessageBox("FALSE");
}
[Hello] 就是跳个 MessageBox 秀 Hello World !
OnButtonHello()
{
MessageBox("Hello World");
}
问题! 这个
SomeApiInDLL() 就是很久很久後才会 return 值,
可是! 在等待 SomeApiInDLL return 的过程当中
[Hello] 这个按钮却
“可以按”!!!
完全不会被卡住
<o>
照我过去的经验,如果 message process 不 return, hang 在那边
应该整个应用程式都会没有回应的在那边等,
但是这个 DLL 的函数却可以在不 return 的状态下,
让我的程式可以继续回应其他的 message。
这个包含 SomeApiInDLL() 的 DLL 是路上捡来的 XD
没有 SourceCode 可看, 它到底是怎麽做到不会让最上层 AP 卡在哪里,
而 AP 也真的乖乖地在它的 SomeApiInDLL() 做完之後才乖乖地秀出
TRUE 或 FALSE 的 MessageBox...
这... 怎麽办到的!?
我想了很久还是想不到。
请教前辈 <(_ _)>
--
To iterate is human, to recurse is divine.
递回只应天上有, 凡人该当用回圈. L. Peter Deutsch
--
夫兵者不祥之器物或恶之故有道者不处君子居则贵左用兵则贵右兵者不祥之器非君子
之器不得已而用之恬淡为上胜而不美而美之者是乐杀人夫乐杀人者则不可得志於天下
矣吉事尚左凶事尚右偏将军居左上将军居右言以丧礼处之杀人之众以哀悲泣之战胜以
丧礼处之道常无名朴虽小天下莫能臣侯王若能守之万物将自宾天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦将知止知止可以t9562614.HUNG.ab.nthu.edu.tw海
1F:推 nosrep:虽然不太清楚MFC.但底层有可能释放执行权给 210.202.1.253 07/24 15:10
2F:→ nosrep:上层使用..也许就是要防止上层AP卡住 210.202.1.253 07/24 15:11
3F:→ nosrep:不过这是废话啦..XD..只是说可以找找API 210.202.1.253 07/24 15:11