zoukankan      html  css  js  c++  java
  • THRDTERM-----干净地结束一个线程

    惊恐THRDTERM产生两个线程。周期性地检查一个event对象。以决定要不要结束自己。


    #define WIN32_LEAN_AND_MEAN

    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<time.h>
    #include "MtVerify.h"


    DWORD WINAPI ThreadFunc(LPVOID);
    HANDLE hRequestExitEvent = FALSE;


    int main()
    {
    HANDLE hThreads[2];
    DWORD dwThreadId;
    DWORD dwExitCode = 0;
    int i;
    hRequestExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    for (i = 0; i < 2; i++)
    {
    MTVERIFY(hThreads[i] = CreateThread(NULL, 0, ThreadFunc,
    (LPVOID)i, 0, &dwThreadId));
    }
    //wait around for a while, make sure the thread is running
    Sleep(1000);
    SetEvent(hRequestExitEvent);
    WaitForMultipleObjects(2, hThreads, TRUE, INFINITE);

    for (i = 0; i < 2; i++)
    {
    MTVERIFY(CloseHandle(hThreads[i]));
    }


    return EXIT_SUCCESS;

    }

    DWORD WINAPI ThreadFunc(LPVOID p)
    {
    int i;
    int inside = 0;
    UNREFERENCED_PARAMETER(p);
    //seed the random-number generator
    srand((unsigned)time(NULL));
    for (i = 0; i < 1000000; i++)
    {
    double x = (double)(rand()) / RAND_MAX;
    double y = (double)(rand()) / RAND_MAX;
    if ((x*x + y*y) <= 1.0)
    {
    inside++;
    }
    if (WaitForSingleObject(hRequestExitEvent, 0) != WAIT_TIMEOUT)
    {
    printf("Received request to terminate ");
    return (DWORD)-1;
    }
    }
    printf("PI=%.4g ",(double)inside / i*4);
    return 0;
    }

  • 相关阅读:
    对象的创建过程以及super关键字的使用
    Java语言基础
    数据结构-思考总结
    ssh简化登录
    WebStorm设置eslint保存自动格式化
    Jmeter简单使用
    nodemon添加babel支持
    VueCli 添加自定义组件报错
    shell写一个压测脚本
    Vue v-for指令中 key 的必要性
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7151444.html
Copyright © 2011-2022 走看看