2016-12-05 4 views
0

Что я хочу сделать, так это: Итак, у меня есть 4 потока. и для каждого потока я создаю IOCP. внутри функции потока Я жду на GetQueuedCompletionStatus (INIFINIT) , чтобы получить работу, а затем обработать ее, а затем снова подождать.Windows IOCP tree?

Так что если я хочу отправить задание в конкретный поток, я просто PostQueuedCompletionStatus на его IOCP.

Но то, что я хочу, - это иметь как главный IOCP, так и внутри функции fun. i 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; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^