1

スレッドを作成するクラスの複数のインスタンスをインスタンス化しています。スレッドは静的であるため、オブジェクトのインスタンスは互いのスレッド操作に干渉しますか?

奇妙なことに、2つの異なる波形が表示され、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 ???
4

1 に答える 1

0

クラス内のスレッドオブジェクトが静的である場合、クラスのすべてのインスタンスに対して1つのスレッドしかありません。
クラス内のスレッドオブジェクトが静的でない場合、クラスの各インスタンスには1つのスレッドオブジェクトがあります。これは問題ありません。

于 2012-04-20T06:36:26.693 に答える