Как создать несколько нитей, каждый с другой функцией ThreadProc(), используя CreateThread()

Я успешно создал один поток, используя CreateThread().

Теперь я хочу создать 'n' количество потоков, но каждый с различным ThreadProc().

Я пробовал следующий код, но с его помощью создается "n" количество потоков, выполняющих одну и ту же задачу (поскольку функция Threadproc() для всех потоков одинакова).

    //Start the threads
for (int i=1; i<= max_number; i++) 
{
CreateThread( NULL, //Choose default security
              0, //Default stack size
              (LPTHREAD_START_ROUTINE)&ThreadProc,
              //Routine to execute. I want this routine to be different each time as I want each  thread to perform a different functionality.
              (LPVOID) &i, //Thread parameter
              0, //Immediately run the thread
              &dwThreadId //Thread Id
            ) 
}

Есть ли способ, которым я могу создать 'n' число потоков, каждый с различными процедурами потока?

1 ответ

Решение

Попробуй это:

DWORD WINAPI ThreadProc1(  LPVOID lpParameter)
{
  ...
  return 0 ;
}

DWORD WINAPI ThreadProc2(  LPVOID lpParameter)
{
  ...
  return 0 ;
}

...

typedef DWORD (WINAPI * THREADPROCFN)(LPVOID lpParameter);

THREADPROCFN fntable[4] = {ThreadProc1, ThreadProc2, ...} ;

//Start the threads
for (int i = 0; i < max_number; i++) 
{
  DWORD ThreadId ;

  CreateThread( NULL,
                0,
                (LPTHREAD_START_ROUTINE)fntable[i],
                (LPVOID) i,
                0,
                &ThreadId
              ) ;
}

Это запустит потоки max_number с различными процедурами потока (TreadProc1, ThreadProc2 и т. Д.), Как определено в fntable.

Другие вопросы по тегам