Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用事件的多线程求和_C++_Multithreading_Event Handling - Fatal编程技术网

C++ 使用事件的多线程求和

C++ 使用事件的多线程求和,c++,multithreading,event-handling,C++,Multithreading,Event Handling,我试图强调我在多线程部分的知识,我在让活动顺利进行方面遇到了一些问题 所以基本上我使用的是两个线程,一个线程只是将某个变量yy1设置为1,第二个线程应该有一个wait函数来获取yy1的值,并添加一个额外的值,然后将结果放入变量y2中 我可以用互斥或信号量来实现,但很难用事件来实现 #include <process.h> #include <windows.h> #include <iostream> #include <math.h>

我试图强调我在多线程部分的知识,我在让活动顺利进行方面遇到了一些问题

所以基本上我使用的是两个线程,一个线程只是将某个变量yy1设置为1,第二个线程应该有一个wait函数来获取yy1的值,并添加一个额外的值,然后将结果放入变量y2中

我可以用互斥或信号量来实现,但很难用事件来实现

    #include <process.h>
#include <windows.h>
#include <iostream>
#include <math.h>

using namespace std;
void ThreadFunction1(void *pParam);
void ThreadFunction2(void *pParam);


HANDLE h_Event1;
int yy1= 0;
int y2 = 0;

void main(void)                             // Primary Thread
{
    h_Event1 = CreateEvent(NULL,            // Security Attributes
        FALSE,              // Manual Reset: no/auto , Auto Reset when the event released
        FALSE,              // Initial Statse: not set , not occupied 
        NULL);              // Name: no


    _beginthread(ThreadFunction1,           // Pointer to Thread Function
        0,                  // Stack Size set automatically
        (void*)&yy1);   // Frequency


    _beginthread(ThreadFunction2,           // Pointer to Thread Function
        0,                  // Stack Size set automatically
        (void*)&y2);    // Frequency

    SetEvent(h_Event1);
    CloseHandle(h_Event1);

    cout << yy1<<endl;
    cout << y2 << endl;

}

void ThreadFunction1(void *pParam)          // Secundary Thread
{
    int xx1;

    xx1 = (int)*(int*)pParam;

    WaitForSingleObject(h_Event1, INFINITE);
    xx1 = 1;
    *(int*)pParam = xx1;
    Sleep(100);
    _endthread();
}

void ThreadFunction2(void *pParam)          // Secundary Thread
{
    int xx1;

    xx1 = (int)*(int*)pParam;

    WaitForSingleObject(h_Event1, INFINITE);
    xx1 = 1+ (yy1);
    *(int*)pParam = xx1;
    Sleep(10);

    _endthread();
}
注:
我知道在这种情况下使用多线程可能没有任何意义,但我只是在尝试适应事件的使用。

你得到了你想要的行为。启动两个线程,两个线程都在等待事件。当您向事件发送信号时,它们都会唤醒并开始(按随机顺序)访问全局变量yy1。由于数据竞争,最终的结果是完全未定义和不稳定的行为

看起来像是
C++
。用适当的特定于语言的Tag.SergeyA标记您的问题,如何让第二个线程在等待函数中等待,直到我从第一个结果中获得结果,以实现适当的求和?@OmarHussein,您应该使用互斥体或类似互斥体的对象(如临界部分)。事件不是解决这个问题的合适工具。我明白你的意思。。我编写代码只是为了熟悉事件。在将结果打印到main方法之前,我只通过添加sleep()100毫秒,就可以使代码正常工作。
0
2