ppl

    4熱度

    1回答

    我想在不同類型的任務上使用PPL「when_all」。然後給該任務添加一個「然後」調用。 但是,when_all返回帶有向量的任務,所以所有元素必須是相同的類型。那麼,我該如何做到這一點? 這是我想出了,但感覺就像一個黑客攻擊的一位: //3 different types: int out1; float out2; char out3; //Unfortunately I cant

    0熱度

    1回答

    我有MFC應用程序使用並行模式庫的一些異步任務。其中一些使用COM對象,所以我需要在這些任務中初始化COM庫。在所有這些情況下,我使用COM STA模型初始化,因爲主線程是MFC應用程序(MFC應用程序線程可以是STA ONLY),我不知道我的任務將在哪個腳本上下文中調用。 一些示例: BOOL CMyApp::InitInstance() { // base initializat

    3熱度

    2回答

    Visual Studio 2015的std :: thread在內部基於PPL的任務系統實現嗎? 我的問題的背景是,對於幾個任務使用std :: thread是否有意義,因爲它們已經在公共線程池上執行了均衡,還是通過PPL任務執行任務更好? 根據(Which std::async implementations use thread pools?)這似乎是,但因爲這個問題已很舊,我想獲得一個「官

    0熱度

    2回答

    我想要與SIMD並行數組的元素。 爲了避免鎖定我使用的是組合的線程本地這並不總是因爲_mm_add_epi32的16個字節 對準拋出異常 concurrency::combinable<__m128i> sum_combine; int length = 40; // multiple of 8 concurrency::parallel_for(0, length , 8, [&](int

    1熱度

    1回答

    我試圖通過使用其Scheduler類來管理PPL本地線程的數量,這裏是我的代碼: for (int i = 0; i < 2000; i ++) { // configure concurrency count 16 to 32. concurrency::SchedulerPolicy policy = concurrency::SchedulerPolicy(2, con

    1熱度

    1回答

    更快我有這樣的代碼(僞代碼,因爲我無法證明我的程序): concurrent_vector a, b, c; concurrent_unordered_map mapForResult; for(i=0; i<sequenceCount; i++){ variables temp_a, temp_b, temp_c; database->read(&a, &b, &c);

    3熱度

    2回答

    我使用concurrency::task從ppltasks.h嚴重在我的代碼庫。 我想找一個等待排隊,我可以在那裏做「co_await my_queue.pop()」。有沒有人實施過嗎? 詳細信息: 我有一個生產者線程將元素推送到一個隊列中,另一個接收者線程將等待並在元素到達隊列時喚醒。此接收線程可能會等待/喚醒以處理其他任務(使用pplpp :: when_any)。 我不想要一個接口隊列,我必

    -1熱度

    1回答

    所以我有功能,看起來像這樣 task<shared_ptr<myObjectsResult>> task1 = create_task([this,token, stream] { // Here I have code that is working, but I would like to refactor it // maybe even make it go afte

    0熱度

    1回答

    我在使用線程時遇到以下代碼段的問題。 我讀了微軟的網站,追加到concurrent_vector不亂用迭代器,所以我沒有爲find_if操作期間提供和mutex。 所以我收到的錯誤是「訪問衝突」 我有6個線程同時運行。我應該把這個包裝在mutex?它需要一個嗎?我對C++相當陌生。 std::stringstream key; key << "SearchString " << ID << ",

    0熱度

    1回答

    這是測試任務是否完成的正確方法嗎? const concurrency::task<void> voidTask; if (voidTask != m_getInfoAsync) { if (!m_getInfoAsync.is_done()) { return 0; } } if (voidTask != m_getRangeAsync) {