Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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++;等待但允许事件触发 使用VisualStudio 2013构建一个StaveRealC++客户端,我从NuGuePrase微软.ASPNET.Sigaal.Client .CPP.V120 .WiNoths>/Stult>源S/P>开始工作示例代码开始。_C++_C++11_Winapi_Signalr_Concurrency Runtime - Fatal编程技术网

C++;等待但允许事件触发 使用VisualStudio 2013构建一个StaveRealC++客户端,我从NuGuePrase微软.ASPNET.Sigaal.Client .CPP.V120 .WiNoths>/Stult>源S/P>开始工作示例代码开始。

C++;等待但允许事件触发 使用VisualStudio 2013构建一个StaveRealC++客户端,我从NuGuePrase微软.ASPNET.Sigaal.Client .CPP.V120 .WiNoths>/Stult>源S/P>开始工作示例代码开始。,c++,c++11,winapi,signalr,concurrency-runtime,C++,C++11,Winapi,Signalr,Concurrency Runtime,回顾库源代码,在我看来,事件处理过程是基于(pplx::task)的,它依赖于 理想情况下,我希望连接启动,然后等待broadcastMessage事件发出关闭连接的信号。 此外,在连接关闭之前,“聊天”功能不应返回。我使用WinAPI WaitForSingleObject实现了此功能: HANDLE hEvent; void chat(const utility::string_t& name) { signalr::hub_connection co

回顾库源代码,在我看来,事件处理过程是基于(pplx::task)的,它依赖于

理想情况下,我希望连接启动,然后等待broadcastMessage事件发出关闭连接的信号。
此外,在连接关闭之前,“聊天”功能不应返回。

我使用WinAPI WaitForSingleObject实现了此功能:

HANDLE hEvent;
    void chat(const utility::string_t& name)
    {
        signalr::hub_connection connection{ U("https://testsite") };
        auto proxy = connection.create_hub_proxy(U("ChatHub"));
        proxy.on(U("broadcastMessage"), [](const web::json::value& m)
        {
            ucout << std::endl << m.at(0).as_string() << U(" wrote:") << m.at(1).as_string() << std::endl;
        if (m.at(1).as_string() == L"quit")
            {
                SetEvent(hEvent);
            }
        });

    hEvent = CreateEvent(0, TRUE, FALSE, 0);

        connection.start()
            .then([proxy, name]()
        {
            WaitForSingleObject(hEvent, INFINITE);
        })
            .then([&connection]() // fine to capture by reference - we are blocking so it is guaranteed to be valid
        {
            return connection.stop();
        })
            .then([](pplx::task<void> stop_task)
        {
            try
            {
                stop_task.get();
                ucout << U("connection stopped successfully") << std::endl;
            }
            catch (const std::exception &e)
            {
                ucout << U("exception when starting or stopping connection: ") << e.what() << std::endl;
            }`enter code here`
        }).get();
    }
handlehevent;
无效聊天(const实用工具::string\u t和name)
{
信号器::集线器连接{U(“https://testsite") };
自动代理=连接。创建_hub_代理(U(“ChatHub”);
on(U(“broadcastMessage”),[](constweb::json::value&m)
{
我可以看到,你已经发现了,但是,如果你正在寻找一个C++ 11平台无关的解决方案,考虑一下!
unsigned int accountAmount;
std::互斥体mx;
std::条件变量cv;
无效存款
{
//去银行等。。。
//排队等候。。。
{
std::唯一锁(mx);

STD::你能不能添加一些合理的标签来缩小你的问题的背景?这远远超出了C++的标准。好吧,我没有意识到,我研究了更多的图书馆并添加了额外的信息/标签。
for (;;)
{
if (bComplete) break;
}
HANDLE hEvent;
    void chat(const utility::string_t& name)
    {
        signalr::hub_connection connection{ U("https://testsite") };
        auto proxy = connection.create_hub_proxy(U("ChatHub"));
        proxy.on(U("broadcastMessage"), [](const web::json::value& m)
        {
            ucout << std::endl << m.at(0).as_string() << U(" wrote:") << m.at(1).as_string() << std::endl;
        if (m.at(1).as_string() == L"quit")
            {
                SetEvent(hEvent);
            }
        });

    hEvent = CreateEvent(0, TRUE, FALSE, 0);

        connection.start()
            .then([proxy, name]()
        {
            WaitForSingleObject(hEvent, INFINITE);
        })
            .then([&connection]() // fine to capture by reference - we are blocking so it is guaranteed to be valid
        {
            return connection.stop();
        })
            .then([](pplx::task<void> stop_task)
        {
            try
            {
                stop_task.get();
                ucout << U("connection stopped successfully") << std::endl;
            }
            catch (const std::exception &e)
            {
                ucout << U("exception when starting or stopping connection: ") << e.what() << std::endl;
            }`enter code here`
        }).get();
    }
unsigned int accountAmount;
std::mutex mx;
std::condition_variable cv;

void depositMoney()
{
    // go to the bank etc...
    // wait in line...
    {
        std::unique_lock<std::mutex> lock(mx);
        std::cout << "Depositing money" << std::endl;
        accountAmount += 5000;
    }
    // Notify others we're finished
    cv.notify_all();
}
void withdrawMoney()
{
    std::unique_lock<std::mutex> lock(mx);
    // Wait until we know the money is there
    cv.wait(lock);
    std::cout << "Withdrawing money" << std::endl;
    accountAmount -= 2000;
}
int main()
{
    accountAmount = 0;
    std::thread deposit(&depositMoney);
    std::thread withdraw(&withdrawMoney);
    deposit.join();
    withdraw.join();
    std::cout << "All transactions processed. Final amount: " << accountAmount << std::endl;
    return 0;
}