码迷,mamicode.com
首页 > 编程语言 > 详细

THRDTERM-----干净地结束一个线程

时间:2015-07-24 20:58:55      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

技术分享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\n");
return (DWORD)-1;
}
}
printf("PI=%.4g\n",(double)inside / i*4);
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

THRDTERM-----干净地结束一个线程

标签:

原文地址:http://blog.csdn.net/wangfengfan1/article/details/47040819

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!