我正在实现一个启动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与块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()

在执行此程序之前,我编写了一个程序,该程序在两个块之间进行通信,一个块读取,另一个块写入。在那种情况下,我没有问题。

如果我不使用功能WaitForSingleObject,问题就会消失,但是我的程序几乎总是在完成之前停止。

每个线程使用的功能均以中断方式停止。
但是我希望其他人继续下去直到它消失。

最佳答案

_beginthread 的文档说明您不能使用以下等待功能之一:



而且本文还为您提供了解决方案,即改为使用_beginthreadex

我认为您说的是这个问题



您只需要更改函数即可使用__stdcall调用约定。

关于c - _beginthread和WaitForSingleObject,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10448121/

10-09 15:17