1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
using namespace System;
using namespace System::Threading;
//bool bEventFoireux = false;
ref class ThreadWithState{
public:
ThreadWithState(ManualResetEvent^% ResetEvent, int iWait) : m_ResetEvent(ResetEvent), m_iWait(iWait), bEventFoireux(false){}
~ThreadWithState(){}
void ThreadProc();
private:
ManualResetEvent^ m_ResetEvent;
int m_iWait;
bool bEventFoireux;
};
void ThreadWithState::ThreadProc(){
//static bool bEventFoireux = false;
m_ResetEvent->WaitOne();
if(bEventFoireux)
Console::WriteLine("La prog DotNet c'est foireux !");
bEventFoireux = true;
int iRes = 0;
System::Threading::Thread::Sleep(m_iWait);
for(int i = 0; i < 5000; i++)
iRes += i;
bEventFoireux = false;
m_ResetEvent->Set();
}
[STAThreadAttribute]
int main(array<System::String ^> ^args){
ManualResetEvent^ ResetEvent = gcnew ManualResetEvent(true);
int iVal = 0;// modifier cette valeur avec 1, 10, 100, 1452 par exemple
ThreadWithState^ tws = gcnew ThreadWithState(ResetEvent, iVal);
ThreadStart^ myThreadDelegate = gcnew ThreadStart(tws, &ThreadWithState::ThreadProc);
array< Thread^>^ myThreadArray = gcnew array< Thread^>(11);
for(int i = 0; i < 11; i++){
Thread^ myThread = gcnew Thread(myThreadDelegate);
myThreadArray[i] = myThread;
}
for(int i = 0; i < 11; i++){
myThreadArray[i]->Start();
}
for(int i = 0; i < 11; i++){
myThreadArray[i]->Join();
}
Console::WriteLine("FIN");
return 0;
} |
Partager