Research Article

Development of the Object-Oriented Dynamic Simulation Models Using Visual C++ Freeware

Algorithm 9

The second thread: function ThreadProc.
1.9  DWORD CALLBACK ThreadProc(LPVOID lpdwThreadParam)
  2.9const double  ht = 1.0e-9; //time step of integration, s
  3.9static int  count = 0; //number of particles with z > zMax
  4.9while(count < (signed)vpp.size())
  5.9   for(int  i = 0; i < (int)vpp.size(); ++i)
  6.9    if(vpp[i].stop  ==  false)
  7.9     RK4_4eq<Particle>(&vpp[i], ht, &Particle::t, &Particle::vz,
  8.9    &Particle::vy, &Particle::z, &Particle::y, &Particle::FzFy,
  9.9    &Particle::DvzDt, &Particle::DvyDt, &Particle::DzDt,
10.9    &Particle::DyDt);
11.9     vpp[i].v=sqrt(vpp[i].vy*vpp[i].vy + vpp[i].vz*vpp[i].vz);
12.9     vpp[i].W=0.5*Particle::m*vpp[i].v*vpp[i].v/Particle::q;
13.9     vpp[i].currentData.t = vpp[i].t;
14.9     vpp[i].currentData.z = vpp[i].z;
15.9     vpp[i].currentData.y = vpp[i].y;
16.9     vpp[i].currentData.vz = vpp[i].vz;
17.9     vpp[i].currentData.vy = vpp[i].vy;
18.9     vpp[i].currentData.v = vpp[i].v;
19.9     vpp[i].currentData.W = vpp[i].W;
20.9     vpp[i].history.push_back(vpp[i].currentData);
21.9     if(vpp[i].z >= Particle::pF->zMax)
22.9    vpp[i].stop  =  true;
23.9    ++count;
24.9    
25.9  
26.9if(!vpp[particleListBox].stop)
27.9sprintf_s(bufListBox, " t = %.3ey = %.5fz = %.5f",
28.9            vpp[particleListBox].history.back().t,
29.9            vpp[particleListBox].history.back().y,
30.9            vpp[particleListBox].history.back().z);
31.9SendMessage(GetDlgItem(hModalDlg, IDC_ListBox),LB_ADDSTRING,
32.9                      0, (LPARAM)bufListBox);
33.9SendMessage(GetDlgItem(hModalDlg, IDC_ListBox), LB_SETTOPINDEX,
34.9  (WPARAM)(vpp[particleListBox].history.size()-1), 0);
35.9
36.9InvalidateRect(hModalDlg, NULL, FALSE);
37.9if(hModelessDlg != 0)
38.9InvalidateRect(hModelessDlg, NULL, FALSE);
39.9Sleep(sleep);
40.9
41.9return  0;
42.9