严格说来,DLL中不应该有自己的消息循环,所以不提倡在DLL中创建窗口。
是否可以采取以下办法: 计时器用线程来取代?我就有这样的例子和控件。
是否可以采取以下办法: 计时器用线程来取代?我就有这样的例子和控件。
解决方案 »
- VS2008安装不成功
- 如何响应ToolBar上的鼠标移动消息?
- 紧急求助关于socket的问题
- 在一种规矩的清晰的JPG或者GIF或者PNG或者BMP图片上,有几个规矩的宋体字,如何识别出来呢?
- 内存的问题。
- 几个编程中的小问题,高手帮一下!多谢!
- 请教编译问题
- 在大家的帮助下,毕设成功完成!想和大家分享我的好心情!散分!!!
- 往对话框中的列表框加一条数据
- 求救:用VC做了一个AX控件,用VC程序测试该控件没有问题(内存泄漏、访问异常等错误均没有),但用VB程序测试总导致VB崩溃——诸位高手有何见解或参考意见?
- 请问谁能告诉我成都有培训C++/VC++的地方吗,在哪里?
- 请教经验:看什么书好?
后台线程()
{
while(not_quit)
{
得到当前时间t1;
处理。
得到当前时间t2;
发消息给主窗口,,,
Sleep(period - (t2-t1) );
}
}
伪语言的说明
Win32系统的DLL是在单独的进程空间中运行的,即使你不使用系统也会有默认得消息循环验证,比如Dll被Load和Release时系统都要产生相应的消息。有很多软件的某些界面模块就是封装到Dll中的,Windows系统的几个核心Dll就在维护着系统的很多隐藏窗口和一个很大的消息循环。
另外,使用线程将大大占用CPU的处理时间,Sleep是Win16的方法,时间精度只能达到55毫秒,在Win32系统下只是兼容使用,而且会堵塞整个调用后台线程的消息循环。
1. 你说是线程销耗的CPU 时间多还是消息循环耗的时间多?2.Settimer精度会比Sleep()还高?不喜欢可以用TimeEvent3.该线程在后台,怎么会影响主线程运行?4.Dll的消息线程是可以封掉了(不让系统通知消息)5.如果精度实在要求很高,建议使用timeSetEvent()(1ms左右)
while(1)
{
...
if(WaitForSingleObject(OBJECT_CONTROLED, ANY_TIME_YOU_WANT) == WAIT_TIMEOUT)
{
//SendSomeMessageHere
continue;
}
else
break;
...
}
其中,OBJECT_CONTROLED可以是外部控制的一个CEvent或其他任何好用的东东。