0

ばかげているように聞こえるかもしれませんが、実行時に SRWLocks のベクトル/配列を動的に作成したいと考えています。次のコードは両方の方法でコンパイルされますが、配列は機能しません。おそらく問題は、new 演算子を使用して SRWLock オブジェクトを作成できるかということです。

これが行われていない場合、SRWLock オブジェクトの配列を作成する正しい方法は何ですか?

#include "stdafx.h"
#include <ppl.h>
#include <Windows.h>
#include <iostream>

using namespace std;

#define NOT_WORKING

int _tmain(int argc, _TCHAR* argv[])
{


#ifdef NOT_WORKING

// The following doesn't work
       SRWLOCK *lock = new SRWLOCK[2];

       int a = 10;

       AcquireSRWLockExclusive(&lock[0]);
       cout<<"Exclusive Lock Acquired";
       a++;
       ReleaseSRWLockExclusive(&lock[0]);


       // The following doesn't work either

       /*
       SRWLOCK *lock_n = new SRWLOCK;


       AcquireSRWLockExclusive(lock_n);
       cout<<"Exclusive Lock Acquired";
       a++;
       ReleaseSRWLockExclusive(lock_n);

       */

       #else
// This works
       SRWLOCK lock;

       int a = 10;
       AcquireSRWLockExclusive(&lock);
       cout<<"Exclusive Lock Acquired";
       a++;
       ReleaseSRWLockExclusive(&lock);

#endif
       cout<<"Value of a:"<<a;
       cin.get();

       return 0;
}
4

1 に答える 1

0

User1577008 自身の回答: わかった! ロック オブジェクトが動的に作成される場合は、InitializeSRWLock() 関数を使用する必要があります。誰かがこの回答を貼り付けて、この質問を閉じるのを手伝ってください。

于 2012-08-05T07:44:18.967 に答える