比如处理数据的时候,在子线程中计算出结果,并为结果分配空间(不在主线程中分配空间是因为结果大小未知),将结果返回给主线程以后,要由主线程释放子线程中分配的空间么?感觉这样做有点别扭,但一时想不到更合适的办法,想听听大家的意见....

解决方案 »

  1.   

    尽量使用Windows的API分配函数,比如GlobalAlloc和HeapAlloc,尽量不要用CRT的malloc和new,它们不是线程安全的
      

  2.   

    例如: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里的内容会自动析构