前の質問が閉じられたので、これを再投稿します..今回はもっとよく説明しようとしました...さらに説明が必要な場合はお知らせください:
関数 doSomething(int count) を持つクラス A があります クラス A 内で、それぞれ関数 doSomething() を呼び出し、各スレッドでカウント 1 ~ 100 を渡す 100 のスレッドを開きたいと考えています。
つまり...最初のスレッドがこの関数を呼び出すとき、それはdoSomething(1)を呼び出す必要があり、2番目のスレッドはdoSomething(2)を呼び出す必要があります...
これは私のコードがどのように見えるかです:
struct input {
A* in;
int count;
};
myFunc(void* data)
{
input* tP = (input*) data;
A* obj = tP->in;
int ct = tP->count;
obj->doSomething(ct);
}
class A {
doSomething(int count);
Thread2doSomething();
}
doSomething(int count)
{
cout<<"Print value is"<<count;
}
Thread2doSomething()
{
for (i = 1 to 100)
{
input myIN;
myIN.in = this;
myIN.count = i;
beginthreadex(myFunc, &myIN);
}
}
上記のコードは、ここで 100 個のスレッドを生成することを期待しています..doSomething(); を呼び出すと、それぞれのスレッドの新しい値は count 1,2,3...100 になります。
新しいスレッドでの doSomething の呼び出しごとに、1、2、3、... から 100 までの異なるカウント値が渡される必要があります。
しかし、そうはなりません。それに渡されるカウント値はかなりランダムです...しばしば同じ値を複数回取得します...そしていくつかの値をまったく取得しません.時々doSomethingに渡されるカウントの値はすべてのスレッドで同じです...
呼び出しは、doSOmething(4)、doSomething(4)、doSomething(7)、doSomething(10)、doSomething(10) などのようになります。
私が物事を明確にしたことを願っています... plsはアドバイスします。