线程参数、返回值的内存管理问题... 比如处理数据的时候,在子线程中计算出结果,并为结果分配空间(不在主线程中分配空间是因为结果大小未知),将结果返回给主线程以后,要由主线程释放子线程中分配的空间么?感觉这样做有点别扭,但一时想不到更合适的办法,想听听大家的意见.... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 尽量使用Windows的API分配函数,比如GlobalAlloc和HeapAlloc,尽量不要用CRT的malloc和new,它们不是线程安全的 例如:class Result{public: Result() : data_(NULL), size_(0) {} void SetData(size_t newSize, char *newData) { if (data_ != NULL) { delete data_[]; data_ = NULL; } size_ = newSize; data_ = new char [newSize]; memcpy(data_, newData, data_); } char* GetData() { return data_; } ~Result() { if (data_ != NULL) { delete data_[]; } }private: char *data_; size_t size_;};子线程函数:DWORD ThreadFunc(PVOID param);{ Result *pResult = (Result*)param; ...计算出size,填充好buf pResult->SetData(size, buf); return 0;}主线程函数:void mainFunc(){ Result result; HANDLE hChildThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, &result, NULL, NULL); WaitForSingleObject(hChildThread, INFINITE); UseData(result.GetData());}// 该函数返回时,result里的内容会自动析构 vc6.0程序转化为VS2010请问有办法让VC6.0的控件变化为VS的吗? 请教有关兼容DC调色板的问题 这是什么格式的图片 DrawString Windows Media Player 是基于单文档还是多文档还是对话框? 如何用win32 SDK搭建FTP“服务器”? ??如何在对话框中显示位图文件 请问如何用mciSendCommand()调整音量大小?? 菜鸟提问:关于switch的问题 生成应用程序问题 问个C语言历史的小问题[有答案了再加分] 如何在注册表启动项中加入带命令行参数的程序
{
public:
Result() : data_(NULL), size_(0)
{}
void SetData(size_t newSize, char *newData)
{
if (data_ != NULL)
{
delete data_[];
data_ = NULL;
}
size_ = newSize;
data_ = new char [newSize];
memcpy(data_, newData, data_);
} char* GetData()
{
return data_;
} ~Result()
{
if (data_ != NULL)
{
delete data_[];
}
}
private:
char *data_;
size_t size_;
};
子线程函数:
DWORD ThreadFunc(PVOID param);
{
Result *pResult = (Result*)param;
...计算出size,填充好buf
pResult->SetData(size, buf);
return 0;
}
主线程函数:
void mainFunc()
{
Result result;
HANDLE hChildThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, &result, NULL, NULL);
WaitForSingleObject(hChildThread, INFINITE);
UseData(result.GetData());
}// 该函数返回时,result里的内容会自动析构