1. 程式人生 > >windows執行緒間通訊之:事件

windows執行緒間通訊之:事件

// CreatEventDemo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream"
#include <windows.h>


using namespace std;

DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI ThreadProc2(LPVOID lpParam);
HANDLE hEvent = NULL;
HANDLE hThread1 = NULL;
HANDLE hThread2 = NULL;

int main(int argc,char *args[])
{
    // 使用手動重置為無訊號狀態,初始化時無訊號狀態
    hEvent = CreateEvent(NULL,
                        TRUE, // 指定將事件物件建立成手動復原(true)還是自動復原(false)
                              /* 該變數設定為true, 使用SetEvent, 訊號一致有 */
                              /* 該變數設定為false, 使用SetEvent, 訊號只有一次 */
                        FALSE, // 預設有無訊號
                        NULL); // 事件名稱

    hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc1,NULL,0,NULL);
    Sleep(200);
    hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc2,NULL,0,NULL);
    Sleep(200);
    if (NULL == hThread1 || NULL == hThread2)
    {
        cout <<"create thread fail!";
    }
    // 設定有訊號,如果設定為手動復原,可以用ResetEvent設定為無訊號
    SetEvent(hEvent);

    Sleep(3600*1000);
    return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
    cout <<"in
[email protected]
!"<<endl;

    while(1)
    {
        DWORD dReturn = WaitForSingleObject(hEvent, INFINITE);
        if (WAIT_OBJECT_0 == dReturn)
        {
            cout <<" thread1 signaled ! "<<endl;
            ResetEvent(hEvent);
        }
        cout <<"in thread1 --signal"<<endl;
    }

    return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParam)
{
    cout <<"in
[email protected]
!"<<endl;

    while(1)
    {

相關推薦

windows執行通訊事件

// CreatEventDemo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "iostream" #include <windows.h> using na

windows執行通訊訊號量

可以描述一個資源有多少。#include "stdafx.h"#include <windows.h>#include <iostream>#include <process.h>using namespace std;CRITICAL_

【Java併發程式設計】使用wait/notify/notifyAll實現執行通訊的幾點重要說明

在Java中,可以通過配合呼叫Object物件的wait()方法和notify()方法或notifyAll()方法來實現執行緒間的通訊。線上程中呼叫wait()方法,將阻塞等待其他執行緒的通知(其

python多執行————3、多執行通訊共享變數,queue

1、共享變數 #通過共享變數 import time import threading url_list = [] def get_detail_html(): global url_list while True: if len(url_list):

Java多執行學習筆記15執行通訊

詳細程式碼見:github程式碼地址   本節內容: 1)ThreadLocal類的使用     JDK文件及方法翻譯     InheritableThreadLocal的使用   5.

Java多執行學習筆記14執行通訊

詳細程式碼見:github程式碼地址   本節內容: 1) 實戰 等待/通知之交叉備份 2) 方法join的使用(Jdk文件翻譯及原始碼解析)     join()及join(long)的使用和實現原理   &nbs

Java多執行學習筆記13執行通訊

詳細程式碼見:github程式碼地址   本節內容: 1)  生產者消費者模型     多個生產者和多個消費者: 操作值假死及解決     多個生產者和多個消費者: 操作棧假死及解決 2) 通過管

android進階3step2Android App通訊——Android執行通訊

Android進階:網路與資料儲存—步驟1:Android網路與通訊(第2小節:Handler) https://blog.csdn.net/qq_17846019/article/details/82906216 Android進階:網路與資料儲存—步驟1:Android網路與通訊(第3小

執行通訊與協作方式——wait-notify機制

大家好,上篇文章為大家介紹了執行緒間通訊和協作的一些基本方式,那這篇文章就來介紹一下經典的wait-notify機制吧。 什麼是wait-notify機制? 想象一下有兩個執行緒A、B,如果業務場景中需要這兩個執行緒交替執行任務(比如A執行完一次任務後換B執行,B執行

Java多執行學習筆記11執行通訊

本文是我學習Java多執行緒以及高併發知識的第一本書的學習筆記, 書名是<<Java多執行緒程式設計核心技術>>,作者是大佬企業高階專案經理 高洪巖前輩,在此向他致敬。我將配合開發文件以及本書和其他的部落格 奉獻著的文章來學習,同時做一些簡單的總結。有

第三章執行通訊

一句話總結wait和notify: wait使執行緒停止執行, 而notify使停止的執行緒繼續執行。 wait()執行後,執行緒進入等待執行緒佇列,釋放鎖。notify()執行後,並不立即釋放鎖,後面語句要執行完才釋放。 關鍵字synchronized

Java 併發執行通訊與協作

摘要:   執行緒與執行緒之間不是相互獨立的個體,它們彼此之間需要相互通訊和協作,最典型的例子就是生產者-消費者問題。本文首先介紹 wait/notify 機制,並對實現該機制的兩種方式——synchronized+wait-notify模式和Lock+Con

執行通訊_等待/通知Thread.join()

Thread.join原始碼:public final synchronized void join(long millis) throws InterruptedException {

Android訊息機制原理,仿寫Handler Looper原始碼跨執行通訊原理--執行通訊原理(一)

前言:我們都知道Android的執行緒通訊是用Handler、Looper機制實現的,面試也經常問道,網上也有很多文章介紹原始碼但是可能很多小白只是機械是的記憶,回答不清楚原理究竟是怎麼回事。下邊我將一步一步仿寫一個Handler、Looper模擬Android的執行緒間通訊

五、JAVA多執行執行通訊(wait、notify、notifyAll、wait set、自定義鎖 BooleanLock )

       我們在開發多執行緒程式的時候,往往不會只存在一個獨立的執行緒,相反大多數情況下是需要多個執行緒之間進行協同工作的,如何在多個執行緒之間進行通訊,是本章學習的重點。另外,本章的最後部分將會分析synchronized關鍵字的缺陷,我們手動實現了一個

Android基礎學習程序執行通訊方式總結

        首先介紹一下程序和執行緒的基本概念及兩者之間的區別:   程序:是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位。   執行緒:是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本

C#——基於委託與事件的多執行通訊(同樣適用於非UI執行通訊

在研究c# 執行緒之間通訊時,發現傳統的方法大概有三種 ①全域性變數,由於同一程序下的多個程序之間共享資料空間,所以使用全域性變數是最簡單的方法,但要記住使用volatile進行限制。 ②執行緒之間傳送訊息(這個隨後文章中會討論到)。 ③CEvent為MFC中的一

windows C++程序執行通訊

程序間通訊 程序基本概念 In computer science, inter-process communication or interprocess communication (IPC) refers specifically to the

java多執行同步以及執行通訊詳解&amp;消費者生產者模式&amp;死鎖&amp;Thread.join()(多執行程式設計二)

從執行結果,我們就可以看出我們4個售票視窗同時賣出了1號票,這顯然是不合邏輯的,其實這個問題就是我們前面所說的執行緒同步問題。不同的執行緒都對同一個資料進了操作這就容易導致資料錯亂的問題,也就是執行緒不同步。那麼這個問題該怎麼解決呢?在給出解決思路之前我們先來分析一下這個問題是怎麼產生的?我們宣告一個執行緒類

Java多執行執行通訊--等待(wait)/通知(notify)機制,等待/通知交叉備份例項

1、什麼是等待/通知機制   等待/通知機制在生活中比比皆是,比如在就餐時就會出現,如圖所示。      廚師和服務員之間的互動要在“菜品傳遞臺”上,在這期間會有幾個問題:   1).廚師做完一道菜的時間不確定,所以廚師將菜品放到‘菜品傳遞言,上的時間也