2012-04-20 81 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