タスク キューを作成する必要があるようです。つまり、何らかのタスクを実行するためにワーカー スレッドを作成してから終了します。その場合、そのアプローチについてはこちらで説明しています。
しかし、あなたの本当の質問は、スレッド間でデータをやり取りすることです。関数CreateThreadLPVOID lpParameter
には、まさにそのような機能のために含まれているパラメーターが含まれています。これは void * であるため、配列へのポインター、構造体へのポインターなど、任意の変数型を受け入れます。これにより、必要なだけデータをやり取りできます。
以下のコード スニペットは、ポインタをデータの配列に渡します。これはあなたにとって興味深い部分になります
ここにスレッドを作成するセクションがあります
hThreadArray[i] = CreateThread(
NULL, // default security attributes
0, // use default stack size
MyThreadFunction, // thread function name
pDataArray[i], // argument to thread function
0, // use default creation flags
&dwThreadIdArray[i]); // returns the thread identifier
MyThreadFunction
データを送受信 するワーカー関数を探します。
完全なビルド可能なコードは次のとおりです
posix の場合:
pthread_create()
渡せるデータも含まれます:
int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg);
invoid *arg
引数は、Windows バージョンと同様に、最後の引数を使用してスレッドに渡すことができます。また、やりたいことのために機能するのはpthread_join()
、プロトタイプ化された関数です。
int pthread_join(pthread_t th, void **thread_return);
この関数は、呼び出されたスレッドの終了時にハンドラーとして使用されます(最初の引数スレッドハンドル)。スレッドが終了すると、pthread_join の最後の引数がデータを受け取ることができます。このデータは、指定された目的に役立つ場合があります。