Как создать несколько нитей, каждый с другой функцией 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.