• Windows多线程学习随笔


      自学Windows多线程知识,例程如下:

     1 #include <iostream>   
     2 #include <windows.h>  
     3 #include <process.h>
     4 using namespace std;
     5 HANDLE hMutex = NULL;//互斥量
     6 HANDLE mutex = NULL;
     7 
     8 unsigned WINAPI Fun1(PVOID lpParamter)
     9 {
    10     WaitForSingleObject(mutex, INFINITE);
    11     for (int i = 0; i < 3; i++)
    12         cout << "A Thread Fun 1 Display!"<<endl;
    13     Sleep(200);
    14     ReleaseMutex(mutex);
    15     return 0L;
    16 }
    17 
    18 
    19 void main()
    20 {
    21     HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, Fun1, NULL, 0, NULL);//较CreateThread更加安全
    22     //HANDLE hThread = CreateThread(NULL, 0, Fun1, NULL, 0, NULL);
    23     CloseHandle(hThread);
    24     //_endthreadex((unsigned)hThread);//较CloseHandle更加安全
    25     mutex = CreateMutex(NULL,false,"Ohye");
    26 
    27     for (int i = 0; i < 3; i++){
    28         WaitForSingleObject(mutex, INFINITE);
    29         cout << "Main Thread Display!" << endl;
    30         Sleep(500);
    31         ReleaseMutex(mutex);
    32     }
    33     
    34     system("pause");
    35 }

    运行结果: 

    _endthreadex与_beginthreadex方法相对应,
    1、_endthreadex销毁了在_beginthreadex分配的堆内存(保证了没有内存泄露)。

    2、其调用了系统API ExitThread退出线程。

    ExitThread  VS _endthreadex
    在编写CC++程序时,要调用_endthreadex来结束线程。基于如下两个理由:

    1、ExitThread函数非C++函数,线程创建的C++对象不会得到析构。

    2、若线程中使用了ptd,ExitThread不会释放内存,造成内存泄露。

    CreateThread VS _beginthreadex
    一般的理由是,CreateThread有可能照成内存泄露。(如果使用了ptd内存,而CreateThread并不会在内部自动调用释放内存函数,但若链接的是C/C++运行库的dll版本,则其会在线程退出的DLL_THREAD_DETCH通知中释放内存)。

  • 相关阅读:
    E. Paired Payment 题解(多维最短路)
    九峰与子序列 题解(dp+hash)
    魏迟燕的自走棋 题解(并查集+思维)
    unix学习资料
    Tomcat > Cannot create a server using the selected type
    myeclipse使用hibernate正向工程和逆向工程
    jira的破解
    jsp:useBean用法
    java一个多线程的经典例子
    head first系列PDF资源
  • 原文地址:https://www.cnblogs.com/zeppelin5/p/10019435.html
Copyright © 2020-2023  润新知