• 【多线程】学习1


    学习http://blog.csdn.net/column/details/killthreadseries.html系列的笔记

    做为小白果然是要从头学起...

    预备知识:

    HANDLE(句柄)是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。
    句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。
    句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源。
    其实我们编程时输出一下句柄的值就可以发现这些值往往非常小(<100)。由此就可以看出句柄的性质了。
    无效的返回值为: INVALID_HANDLE_VALUE
     
    LPVOID 是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候再转换回来。
    可以将其理解为long型的指针,指向void型。
     
    system () 函数 
      功 能: 发出一个DOS命令
      用 法: int system(char *command);
      system("pause") :可以实现冻结屏幕,便于观察程序的执行结果;
      system("CLS") :可以实现清屏操作。
      system("color 0A") :其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:
      0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡   紫色 E=淡黄色 F=亮白色
     
    例一:
    C语言调用DOS命令实现定时关机:
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int print()
    {
        printf(" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪
    ");
        printf("╔═══╧╧C语言关机程序 ╧╧═══╗
    ");
        printf("║※1.实现10分钟内的定时关闭计算机 ║
    ");
        printf("║※2.立即关闭计算机  ║
    ");
        printf("║※3.注销计算机  ║
    ");
        printf("║※0.退出系统  ║
    ");
        printf("╚═══════════════════╝
    ");
        return 0;
    }
    void main()
    {
        system("title C语言关机程序");//设置cmd窗口标题
        system("mode con cols=48 lines=25");//窗口宽度高度
        system("color 0B");
        system("date /T");
        system("TIME /T");
        char cmd[20]="shutdown -s -t ";
        char t[5]="0";
        print();
        int c;
        scanf("%d",&c);
        getchar();
        switch(c)
        {
            case 1:printf("您想在多少秒后自动关闭计算机?(0~600)
    ");scanf("%s",t);system(strcat(cmd,t));break;
            case 2:system("shutdown -p");break;
            case 3:system("shutdown -l");break;
            case 0:break;
            default:printf("Error!
    ");
        }
        system("pause");
        exit(0);
    }                

    用C语言删除文件,例如文件的位置是d:123.txt

    #include <stdlib.h>
    #include <stdio.h>
    int main(void)
    {
      system("del d:\123.txt");
      return 0;
    }

    START:

    #include <stdio.h>
    #include <Windows.h>
    
    //子线程函数
    DWORD WINAPI ThreadFun(LPVOID pM)
    {
        printf("子线程的线程ID号为:%d
    子线程输出Hello World
    ",GetCurrentThreadId());
        return 0;
    }
    
    int main()
    {
        HANDLE handle = CreateThread(NULL, 0, ThreadFun, NULL, 0, NULL);
        WaitForSingleObject(handle, INFINITE);
        return 0;
    }

    第一个 CreateThread

    函数功能:创建线程

    函数原型:

    HANDLE WINAPI CreateThread(

      LPSECURITY_ATTRIBUTES lpThreadAttributes,

      SIZE_T dwStackSize,

      LPTHREAD_START_ROUTINE lpStartAddress,

      LPVOID lpParameter,

      DWORD dwCreationFlags,

      LPDWORD lpThreadId

    );

    函数说明:

    第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。

    第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)。

    第三个参数表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。

    第四个参数是传给线程函数的参数。

    第五个参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。

    第六个参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。

    函数返回值:

    成功返回新线程的句柄,失败返回NULL。 

    第二个 WaitForSingleObject

    函数功能:等待函数 – 使线程进入等待状态,直到指定的内核对象被触发。

    函数原形:

    DWORD WINAPI WaitForSingleObject(

      HANDLE hHandle,

      DWORD dwMilliseconds

    );

    函数说明:

    第一个参数为要等待的内核对象。

    第二个参数为最长等待的时间,以毫秒为单位,如传入5000就表示5秒,传入0就立即返回,传入INFINITE表示无限等待。

    因为线程的句柄在线程运行时是未触发的,线程结束运行,句柄处于触发状态。所以可以用WaitForSingleObject()来等待一个线程结束运行。

    函数返回值:

    在指定的时间内对象被触发,函数返回WAIT_OBJECT_0。超过最长等待时间对象仍未被触发返回WAIT_TIMEOUT。传入参数有错误将返回WAIT_FAILED

  • 相关阅读:
    EF – 4.CRUD与事务
    EF – 3.EF数据查询基础(下)数据关联
    EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
    响应式的入门学习
    淘宝相关模块管理
    Git相关
    Drupal相关网站推荐
    在线视频播放软件
    Linux命令的常用
    Linux下使用Git命令及Github项目
  • 原文地址:https://www.cnblogs.com/dplearning/p/4022521.html
Copyright © 2020-2023  润新知