4 つのスレッドを起動するプログラムを実装しています。
機能は次のとおりです。
void* SOURCE_in(struct SOURCE_1*);
void* SOURCE_out(struct SOURCE*);
void* SINK_out(struct SINK_1*);
void* SINK_in(struct SINK*);
関数は、4 つのブロック間の通信を可能にします。ブロック 1 はブロック 2 と通信します。ブロック 2 は 3 番目のブロックと情報を共有します。ブロック 3 は、ブロック 4 と情報を通信します。
私の問題はmain.cにあります
int main(int argc, char** argv){
extern int p, e_source, e_sink_1, l_sink, l_source_1, flag, ctr_source;
extern int ctr_source_1, ctr_sink, ctr_sink1;
SOURCE source; /*C struct*/
SINK sink; /*C struct*/
SOURCE_1 source_1; /*C struct*/
SINK_1 sink_1; /*C struct*/
HANDLE CHT[4];
p = 0;
e_source = flag = 0;
l_sink = e_sink_1 = l_source_1 = 1;
max = 5;
ctr_source = ctr_source_1 = ctr_sink = ctr_sink_1 = 0;
/*Initialize FIFO*/
F *f1 = fifo_init(10);
F *f2 = fifo_init(10);
/*Connect FIFO and modules*/
source.output_source = f1;
sink.input_sink = f1;
sink_1.output_sink = f2;
source_1.input_source = f2;
/*Create Threads*/
CHT[0] = (HANDLE)_beginthread((void (*)(void *))&SOURCE_out, 0, &f1);
CHT[1] = (HANDLE)_beginthread((void (*)(void *))&SINK_in, 0, &f1);
CHT[2] = (HANDLE)_beginthread((void (*)(void *))&SINK_out, 0, &f2);
CHT[3] = (HANDLE)_beginthread((void (*)(void *))&SOURCE_in, 0, &f2);
/* Wait until all threads have terminated */
WaitForSingleObject(CHT[0], INFINITE);
WaitForSingleObject(CHT[1], INFINITE);
WaitForSingleObject(CHT[2], INFINITE);
WaitForSingleObject(CHT[3], INFINITE);
getchar();
return 0;}
WaitForSingleObject 関数が _beginthread では機能しないことを読みました....しかし、私の関数は nunsigned __stdcall 型ではありません...
エラーなしでプログラムをビルドし、ブレークポイントを使用してテストしましたが、問題ありませんでした。コンパイルすると、次の問題が発生します。
スレッド 'Win32 スレッド' (0x11ec) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x918) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x8a4) はコード 0 (0x0) で終了しました。スレッド 'Win32 スレッド' (0x2a8) がコード -1073741510 (0xc000013a) で終了しました。スレッド 'Win32 スレッド' (0x12f8) がコード -1073741510 (0xc000013a) で終了しました。プログラム '[3984] SW=SW.exe: Native' はコード -1073741510 (0xc000013a) で終了しました。
プログラムは関数 getchar() に到達しません
このプログラムを実行する前に、読み取りと書き込みの 2 つのブロック間で通信を行うプログラムを作成しました。その場合、問題はありませんでした。
関数 WaitForSingleObject を使用しない場合、問題はなくなりますが、私のプログラムは、ほとんどの場合、終了する前に停止します。
各スレッドが使用する関数は、ブレークで停止します。しかし、私はその休憩が現れるまで他のものを続けてほしい..