控件中调用有创建线程的动态库问题
首先说明,这个动态库在一般的EXE中调用是没有任何问题的,只是放到控件中就有问题了,不会退出。
动态库DLL使用纯C++写的,没有使用MFC。其中 有一个类CSystem,声明有其一个全局变量 CSystem g_sys
在这个类中,一开始会创建一个线程:
m_hThread = CreateThread( ..., thproc, ..., &m_hThreadID );
线程体内的代码逻辑如下:
在CSystem的析构函数中退出线程:
在一般的EXE中可以正常退出,即 最后的 WaitForSingleObject()可以很快返回,而在控件中却不会返回直到超时,这可以从打印出的“线程退出”判断线程体确实运行到了最后,但是从任务管理器中看不到线程数减少,即这个线程虽然运行到了最后,但它还是没有退出,确实搞不懂了,有请各位帮忙
动态库DLL使用纯C++写的,没有使用MFC。其中 有一个类CSystem,声明有其一个全局变量 CSystem g_sys
在这个类中,一开始会创建一个线程:
m_hThread = CreateThread( ..., thproc, ..., &m_hThreadID );
线程体内的代码逻辑如下:
DWORD thproc( LPVOID )
{
MSG msg;
while ( 1 )
{
if ( PeekMessage( msg, ... ) )
{
if ( msg.message == WM_QUIT )
break;
}
Sleep( 100 );
}
Trace( "线程退出\n" );
}
在CSystem的析构函数中退出线程:
PostThreadMessage( m_hThreadID, WM_QUIT );
DWORD dwRet = WaitForSingleObject( m_hThread, 10000 );
在一般的EXE中可以正常退出,即 最后的 WaitForSingleObject()可以很快返回,而在控件中却不会返回直到超时,这可以从打印出的“线程退出”判断线程体确实运行到了最后,但是从任务管理器中看不到线程数减少,即这个线程虽然运行到了最后,但它还是没有退出,确实搞不懂了,有请各位帮忙
...全文
相关推荐
完整的CListCtrl调用Vector读取文件的动态库完整例子
- 注意线程安全问题,特别是当多个线程同时访问和修改Vector时,需要采取同步措施,如互斥量。
动态库测试动态库测试动态库测试
**界面测试**:MFC主要用于构建用户界面,所以要测试窗口、控件和消息处理的正确性。创建模拟用户交互的自动化测试脚本,确保界面行为符合预期。7.
MFC计算器源码+动态库源码
此外,还可以进一步研究MFC的其他高级特性,如对话框、菜单、工具栏、状态栏的创建,以及多线程编程、网络通信等功能的实现。
QT中制作带有界面的动态库
/path/to/library -lmylib```以上就是使用Qt制作带有界面的动态库的基本步骤。在实际应用中,你可能还需要考虑线程安全、资源管理、错误处理等问题,确保动态库的稳定性和可靠性。
windows编程基础
**控件使用**:Windows提供了许多内建控件,如按钮、编辑框、列表框等,可以通过`CreateWindowEx`创建。控件有自己的消息和属性,如按钮的点击消息`BN_CLICKED`。7.


进程/线程/DLL
