MFC应用在Csinglelock锁后悬挂()
MFC App hangs after CSingleLock Lock()
void CADAPBatchView::AddMsgToStatusWindow(const CString& strMsg)
{
CString strTemp;
CString strEngineStatusEntry;
int nLinesToScrollPast = 0;
int nTrimPos = 0;
strEngineStatusEntry.Format(_T("%s %sn"), CTime::GetCurrentTime().Format( _T( "%H:%M:%S" )), strMsg);
CSingleLock singleLock( &m_csStatusMsg );
singleLock.Lock();
if (m_wndEngineStatusMsgs.GetLineCount() > 200)
{
m_wndEngineStatusMsgs.SetReadOnly(FALSE); //remove readonly so SetSel will work
m_wndEngineStatusMsgs.SetSel(0, m_wndEngineStatusMsgs.LineIndex(100));
m_wndEngineStatusMsgs.Clear();
m_wndEngineStatusMsgs.SetReadOnly(TRUE); //put back readonly
}
int nBegin;
nBegin = m_wndEngineStatusMsgs.GetTextLength();
m_wndEngineStatusMsgs.SetSel(nBegin, nBegin); // Select last character
m_wndEngineStatusMsgs.ReplaceSel(strEngineStatusEntry); // Append, move cursor to end of text
//m_wndEngineStatusMsgs.SetSel(-1,0); // Remove Black selection bars
//nBegin = m_wndEngineStatusMsgs.GetTextLength(); // Get New Length
//m_wndEngineStatusMsgs.SetSel(nBegin,nBegin); // Cursor to End of new text
nLinesToScrollPast = m_wndEngineStatusMsgs.GetLineCount() - 9 - m_wndEngineStatusMsgs.GetFirstVisibleLine();
m_wndEngineStatusMsgs.LineScroll( nLinesToScrollPast );
if (m_wndChkStatusMsgLog.GetCheck() == 1)
{
WriteToLogFile(strEngineStatusEntry);
}
return;
}
我已连接了显示两个线程的代码。在转储文件崩溃时,我看到主线程在singlelock.Lock()
之后在线。第二个线程以nLinesToScrollPast
开头。我认为发生了僵局,但不知道如何发生。感谢任何帮助,谢谢。
问题是您正在尝试制作方法AddMsToStatusWindow
线程安全,以便从其他线程调用它。您的问题是,只有主应用程序线程可以与GUI进行交互,否则您最终会出现消息泵的问题(因为您确实锁定SendMessage
)。因此,您的设计是错误的。您应该基于CCriticalSection
创建守卫消息队列。因此,该线程将消息将消息放在队列中,然后致电PostMessage
以通知主线程,该线程已将数据/消息放在队列中。主线程将在消息处理程序中的该队列中填充数据。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- c++r值引用应用于函数指针
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 有没有任务栏API可以立即应用注册表更改
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- MFC应用在Csinglelock锁后悬挂()