windows 线程调试记录

出于程序的需要,今天了解了一下线程使用方法,发现线程是个很好玩的东西,于是想写篇日志大笑

编译:vc6.0

头文件:

#include <windows.h>
#include <iostream.h>
#include <stdio.h>

最简单的用法:
DWORD WINAPI FunProc(LPVOID lpParameter);
void main()
{
cout<<"thread test;"<<endl; 
    HANDLE  hThread = CreateThread(NULL,0,FunProc,NULL,0,NULL);
    CloseHandle(hThread); //释放句柄资源,并非关闭进程
getchar(); //主线程一定要持续运行,否则子线程也会关闭
}
DWORD WINAPI FunProc(LPVOID lpParameter)//thread data
{
    while (true)
    {
        cout<<"sub thread"<<endl;
Sleep(100);
    }
     
    return 0;
}


多线程、共享资源、资源加锁用法:
DWORD WINAPI user1(LPVOID lpParameter);
DWORD WINAPI user2(LPVOID lpParameter);




HANDLE hMutex; //独占资源“使用许可证”
void main()
{
cout<<"thread test..."<<endl; 
int * resource = new int;
    hMutex = CreateMutex(NULL, TRUE, "my resource"); //创建独占资源“使用许可证”




WaitForSingleObject(hMutex, INFINITE); //排队等待领取“使用许可证”,参数2表示等待时间(毫秒),INFINITE表示一直等到死!
*resource = 0;
cout << "you can use 'my resource' now!"<<endl;
ReleaseMutex(hMutex); //释放“使用许可证”
ReleaseMutex(hMutex); //释放“使用许可证”,为什么要重复释放两遍,舍不得?不解!
//开辟两个线程
    HANDLE  hThread1 = CreateThread(NULL, 0, user1, resource, 0, NULL);
    HANDLE  hThread2 = CreateThread(NULL, 0, user2, resource, 0, NULL);

Sleep(2000);
while(1)
{
WaitForSingleObject(hMutex, INFINITE);
cout<<"game over, you cannot use 'my resource' any more!"<<endl;
break;
}
//kill thread
cout << "now kill user1 and user2!"<<endl;
if(TerminateThread(hThread1, 0)){
cout<<"user1 was killed!"<<endl;
CloseHandle(hThread1);
}else {
cout<<"killing user1 failed!"<<endl;
}
if(TerminateThread(hThread2, 1)){
cout<<"user2 was killed!"<<endl;
CloseHandle(hThread2);
}else { 
cout<<"killing user2 failed!"<<endl;
}
delete resource;
getchar();
}
DWORD WINAPI user1(LPVOID lpParameter)
{
    while (true)
    {
int resource = *(int *)lpParameter;
WaitForSingleObject(hMutex, INFINITE); //排队等待使用my resource
        cout<<"user1:++resource; value = "<< ++resource <<endl;
Sleep(10);
        ReleaseMutex(hMutex); //用完后释放my resource
    }
     
    return 0;
}
DWORD WINAPI user2(LPVOID lpParameter)
{
    while (true)
    {
int resource = *(int *)lpParameter;
WaitForSingleObject(hMutex, INFINITE);
        cout<<"user2:--resource; value = "<< --resource <<endl;
Sleep(10);
ReleaseMutex(hMutex);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值