2012-04-20 83 views
1

我正在实例化一个创建线程的类的多个实例。由于线程是静态的,对象的实例是否会干扰彼此的线程操作?实例化创建线程的类的多个实例...?

奇怪的是我看到2个不同的波形,并运行在两个不同的睡眠延迟。 ???这是否意味着有2个不同的线程?

void CWaveGeneration::CreateWave() 
{ 

    Y = new double[numPoints]; 
    X = new double[numPoints]; 
    I = new int[numPoints]; 


    CWaveGeneration *pp = this; 
    hThread_Wave = CreateThread(NULL, 0, Thread_Wave, pp, 0, NULL); 
    //within the thread, there is the setting of Sleep(iSleep); 
} 


void CWaveGeneration::CreateWave(int _waveType, double _A, double _w, double _T, double _r, int _numPoints, int _iSleep) 
{ 
    waveType = _waveType; 
    A = _A; 
    w = _w; 
    T = _T; 
    r = _r; 
    numPoints = _numPoints; 
    iSleep = _iSleep; 

    CreateWave(); 
} 


DWORD WINAPI CWaveGeneration::Thread_Wave(LPVOID iValue) 
{ 
    CWaveGeneration *p = (CWaveGeneration*)iValue; 
    switch (p->waveType) 
    { 
    case 0: 
     p->Sine(); 
     break; 
    case 1: 
     p->Square(); 
     break; 
    case 2: 
    // p->Triangle(); 
     break; 
    case 3: 
    // p->SawTooth(); 
     break; 
    } 

    return true; 
} 

从头文件:

static DWORD WINAPI Thread_Wave(LPVOID iValue); 

wave1 = new CWaveGeneration(); 
    wave1->CreateWave(0,100,10,0,0,200, 10); 

    wave2 = new CWaveGeneration(); 
    wave2->CreateWave(1,80,5,0,0,200, 100); 

    // in total, are there 1 thread or 2 threads created here ??? 
+0

你可以给一些代码吗? – Jagannath 2012-04-20 06:22:55

+0

“线程是静态的”是什么意思?在大多数系统上(以及任何支持C++线程模型的系统),您可以随意创建并销毁它们。 – 2012-04-20 07:17:07

+0

我加了一些代码 – jdl 2012-04-20 13:33:52

回答

0

如果你的类线程对象是静态的,那么你将有只有一个线程的所有实例班上。
如果类中的线程对象不是静态的,则该类的每个实例都将有1个线程对象。这应该没有任何问题。

+0

我添加了一些代码 – jdl 2012-04-20 13:34:02