В программе может быть столько потоков, сколько необходимо. В следующем примере создается сразу два потока выполнения. Первый поток выполняет действия, аналогичные потоку предыдущего примера, второй поток каждые 2 секунды 50 раз выдает звуковой сигнал:
UINT MyThread1(LPVOID pParam); UINT MyThread2(LPVOID pParam); void CExampleView::OnStart() { AfxBeginThread(MyThread1,this); AfxBeginThread(MyThread2,NULL); // параметр не передается } UINT MyThread1(LPVOID pParam) { CExampleView *ptrView=(CExampleView *)pParam;
for(int i=0; i<100; i++) { CDC *dc=ptrView->GetDC(); CRect r; ptrView->GetClientRect(&r); dc->TextOut(rand()%r.Width(),rand()%r.Height(),"*",1); } return 0; } UINT MyThread2(LPVOID pParam) { for(int i=0; i<50; i++) { Sleep(2000); MessageBeep(0); } return 0; }
При работе с несколькими потоками для каждого из них должна быть определена своя потоковая функция и каждый из них должен начинаться отдельно. Все потоки процесса затем функционируют одновременно.