小编fla*_*iu2的帖子

哪些是从线程通过 PostMessage 发送 CString 的安全方法

从线程发送CString通过的安全/最佳方式PostMessage是什么?要CString在堆上创建并在接收者收到此信息时进行清理CString

解决方案1:在线程中:

CString* pError = new CString(_T("Unknown error"));
::PostMessage(...(LPARAM)pError);
Run Code Online (Sandbox Code Playgroud)

在主线程中,在 GUI 的某个地方:

CString* pError = (CString*)lParam;
GetDocument()->DoSomething(*pError);
delete pError;
Run Code Online (Sandbox Code Playgroud)

解决方案 2: 或者,将CString对象保留为CThread类内部的成员变量?

class CPlanThread : public CThread [: public CObject]
{
public:
DECLARE_DYNAMIC(CPlanThread)

...
protected:
CString* m_pMessage;

};
Run Code Online (Sandbox Code Playgroud)

CPlanThread::CPlanThread()
:m_pMessage(NULL)
{
m_pMessage = new CString(_T(""));
}

CPlanThread::~CPlanThread()
{
if(NULL != m_pMessage)
    delete m_pMessage;
}
Run Code Online (Sandbox Code Playgroud)

和线程中的某个地方:

::PostMessage(m_hWndMain, WMU_NOTIFYTHREAD, 0, (LPARAM)m_pMessage);
Run Code Online (Sandbox Code Playgroud)

在主线程中,在 GUI 的某个地方:

CString* pError = (CString*)lParam; …
Run Code Online (Sandbox Code Playgroud)

c++ mfc multithreading thread-safety visual-c++

5
推荐指数
1
解决办法
1445
查看次数

将所有网格导出到单个 STL 文件中

如果我在 MeshLab 中加载了一个 STL 文件,并在加载的网格旁边创建了一个新网格,如何将它们全部导出为 STL 文件?现在,如果我将在查看器中看到的内容导出为 STL,我只会导出一个网格,而不是在查看器中看到的两个网格。我缺少什么?

meshlab

5
推荐指数
1
解决办法
2145
查看次数

用于保存 std::byte 的 C++ 类

有没有保存到文件std::bytes 中的 C++ 类?我已经使用了std::ofstream,但是需要强制转换才能执行它:

std::byte bt{ 1 };
std::ofstream ofs{};
ofs.write(reinterpret_cast<const char*>(bt), 1);
Run Code Online (Sandbox Code Playgroud)

你看:reinterpret_cast<const char*>?是否有其他std::byte无需任何强制转换即可保存的 C++ 类?

c++ c++17

3
推荐指数
1
解决办法
166
查看次数

标签 统计

c++ ×2

c++17 ×1

meshlab ×1

mfc ×1

multithreading ×1

thread-safety ×1

visual-c++ ×1