2016-12-05 27 views
0

我想要做的就是休耕: 所以我有4個主題。併爲每個線程創建一個IOCP。 內線程函數我等待GetQueuedCompletionStatus(INIFINIT) 得到一份工作,然後處理它,然後再等待。Windows IOCP樹?

所以,如果我想提交一個工作到一個特定的線程,我只是PostQueuedCompletionStatus其IOCP。

但我想要的是有一個主IOCP和內線程func。我GetQueuedCompletionStatus對主IOCP,所以當我發佈作業主IOCP隨機線程獲取作業和處理它,但我仍然想發送特定的線程的特定作業。我怎樣才能做到這一點?謝謝! 謝謝。

回答

0

好的,我自己做了,謝謝。

這是post_job功能我寫道:

bool WINAPI world_server_process_job_async(job* j) 
{ 
    if (j->type == J_W_RESOLVE) 
    { 
     for (uint32 i = 0; i < w_server.no_of_threads; i++) 
      if (!PostQueuedCompletionStatus(w_server.world_worker_threads[i]->iocp, sizeof(job), NULL, (LPOVERLAPPED)j)) 
       w_server.resolve_drop_count++; 
    } 
    else 
    { 
     for (uint32 i = 0; i < w_server.no_of_threads; i++) 
      if (w_server.world_worker_threads[i]->state == WORKER_INACTIVE) 
       return PostQueuedCompletionStatus(w_server.world_worker_threads[i]->iocp, sizeof(job), NULL, (LPOVERLAPPED)j) ? true : false; 

     bool result = PostQueuedCompletionStatus(w_server.world_worker_threads[w_server.last_to_do_work]->iocp, sizeof(job), NULL, (LPOVERLAPPED)j) ? true : false; 
     if ((++w_server.last_to_do_work) >= w_server.no_of_threads) w_server.last_to_do_work = 0; 
     return result; 
    } 
}