您的位置:首页 > 其它

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

2015-07-24 18:22 411 查看

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: