c++ EDITTEXT和DIRECTSHOW PAUSE()中未解决的问题
unresolved problems with C++ EDITTEXT and DIRECTSHOW PAUSE()
我有一个简单的winform,它写入一个EDITTEXT,随着程序的继续,打印过程执行完美。但是一旦我点击停止按钮,首先调用PAUSE()函数我的程序卡在
里面SetWindowText(m_hWatermarksEditBox, &m_watermarkLog[0]);
所有值初始化,正确的数据进入。
我猜我必须声明一个METHOD WORKER,就像在c#中一样。. NET,但我不知道如何。
STDMETHODIMP CNaveFilter::Pause()
{
ATLTRACE(L"(%0.5d)CNaveFilter::Pause() (this:0x%.8x)rn", GetCurrentThreadId(), (DWORD)this);
HRESULT hr = S_OK;
CAutoLock __lock(&m_cs);
hr = CBaseFilter::Pause();
return hr;
}
STDMETHODIMP CNaveFilter::Stop()
{
ATLTRACE(L"(%0.5d)CNaveFilter::Stop() (this:0x%.8x)rn", GetCurrentThreadId(), (DWORD)this);
HRESULT hr = S_OK;
CAutoLock __lock(&m_cs);
hr = CBaseFilter::Stop();
ATLASSERT(SUCCEEDED(hr));
return hr;
}
你没有显示你在哪里做SetWindowText
,但当你有自定义过滤器时,最有可能的问题是,这个调用你阻塞了你的流/工作线程执行,所涉及的线程锁定死亡。
SetWindowText
只能安全地从UI线程调用(好吧,技术上不仅是它,但绝对不是流线程)。所以,如果你想更新控件文本或向它发送任何消息,你必须用不同的方式来做,这样你的调用线程才能继续运行。
通常,你会在成员变量中存储一些相关的信息(不要忘记临界区锁),然后PostMessage
,在你的窗口/控件上接收消息,并在正确的线程中处理它,在那里调用SetWindowText
。
参见通过sampleCB控制帧/速率和曝光时间。它涵盖了一个有点不同的主题,但在DirectShow过滤器中发送/发布消息方面很有用。
相关文章:
- 节俭并发:未解决的外部问题
- 未解决的外部链接问题
- C++ SQLite3 查询问题未解决
- 编译示例 Cinder 项目时存在大量未解决的外部问题
- 为使用boost的预开发库构建c++包装器时未解决的外部问题
- 另一个与未解决符号相关的问题
- 伊利希特中未解决的外部问题
- 未解决的符号问题
- VS2013与QT5.3.2使用Websocket,并得到一个未解决的外部符号问题
- 在Visual Studio 2013中尝试使用C++连接到mysql时未解决的外部问题
- 格鲁问题,未解决的外部问题
- 带有 OO 的模板导致未解决的外部符号问题
- 对"pthread_key_create"的未定义引用;参数顺序不能解决问题
- 编译多源文件时未解决的外部问题
- 为什么我的程序总是得到未解决的外部问题
- TinyXml未解决的外部问题
- 未解决的外部符号(已经阅读了类似的问题,但没有运气)
- c++ EDITTEXT和DIRECTSHOW PAUSE()中未解决的问题
- MS Detours 2.1-未解决的外部问题
- 链接器错误:未解决的外部符号问题