如何使用CreateThread()创建具有不同ThreadProc()函数的多线程

时间:2013-05-02 06:12:21

标签: c windows multithreading winapi 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'个Thread,每个Thread都有不同的Thread程序?

1 个答案:

答案 0 :(得分:2)

试试这个:

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线程,其中包含fntable中定义的不同线程过程(TreadProc1,ThreadProc2等)。