スレッドプールのいくつかの小さなバグノートを書きます

初期化「()」デフォルトのパラメータのコンストラクタを持つクラス、または正式なパラメータは、その後、初期化を括弧していない場合だけ追加し、デフォルトのパラメータの事情がある場合は特に、それはあなたがデフォルトになり、使用することはできませんが「0であります「ホルマール

···
スレッドプールは(size_t = threadNum 4、size_tのqueSize = 10);
···
時間価格ブラケット構造クラス場合、与えられ
···
INTメイン()
スレッドプールのThreadPool(); //この構成の問題がある
threadpool.startが();

エラー:非クラス型の「WD ::スレッドプール()」はメンバー「スレッドプール」の「スタート」、要求
threadpool.start()。

あなたが達成するために、ソースファイル内の関数のいくつかを書いた場合、ヘッダーとソースファイルは、できるだけ多くを分離するために、必要な宣言、ヘッダー・ファイル内の限り、プリヘッダファイルが必要とされていないように、ライン上の声明への一般的な参照が、そのようなコンストラクタは、あなたは必ず頭を作る必要があることを確認することが重要ですファイル

「TaskQueue.h」を含み

「Thread.h」//コンストラクタが含まれ、隠された構造ベクトルを_threads、この時間だけ、前方宣言「Threadクラスは」十分ではありません、スレッドを作成するには、この時間が、ヘッダファイルを作成することはできませんではありません

含める

含める

std ::ベクトルを使用して、
std :: unique_ptrをを使用しました。

名前空間WD
{
クラスタスク。
クラスThread。

クラススレッドプール
{
フレンドクラスWorkerThread。
公共:
スレッドプールは(size_t threadNum = 4、size_tのqueSize = 10)
:_threadNum(threadNum)
、_queSize(queSize)
、_taskque(queSize)
、_isExit(偽)
{
_threads.reserve(_threadNum)。
}
〜スレッドプール()。

    void start();
    void stop();
    void addTask(Task *task);
    private:
    Task * getTask();
    void threadfunc();
    private:
            size_t _threadNum;
            size_t _queSize;
            vector<unique_ptr<Thread> > _threads;
            TaskQueue _taskque;
            bool _isExit;

}。
}

おすすめ

転載: www.cnblogs.com/prome6/p/11318731.html