美文网首页
windows进程线程

windows进程线程

作者: MagicalGuy | 来源:发表于2018-10-07 14:29 被阅读0次
// 01.入口点.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
// 要release模式才能运行
// 链接器->高级->入口点
void My24() {
    cin.get();
    MessageBox(0, 0, 0, 0);
}

int main()
{
    return 0;
}

=====================

// 02.线程创建.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
int g_nNum = 0;

DWORD WINAPI ThreadProc(LPVOID lParam) {
    printf("我是线程!\n");
    for (int i=0;i<100000;i++)
    {
        g_nNum++;
    }
    printf("%d\n", g_nNum);
    return 0;
}

int main()
{

    CreateThread(NULL, NULL, ThreadProc, NULL, 0, NULL);
    CreateThread(NULL, NULL, ThreadProc, NULL, 0, NULL);

    system("pause");
    printf("%d\n", g_nNum);
    return 0;
}

=======================

// 03.关闭其他进程.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>

bool KillProcess(DWORD dwPid) {
    // 打开进程
    HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,NULL,dwPid);
    if (!hProcess)
    {
        return false;
    }
    TerminateProcess(hProcess, 0);
    CloseHandle(hProcess);
    return true;
}

int main()
{
    KillProcess(4484);
    //exit(0);
    return 0;
}

===========================

// 04.遍历进程.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <TlHelp32.h>
bool EnumProcess() {
    // 1. 先创建快照
    HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (INVALID_HANDLE_VALUE == hTool32)
    {
        printf("快照error!\n");
        return false;
    }
    // 2. 开始遍历进程
    PROCESSENTRY32W psi = { sizeof(PROCESSENTRY32W) };
    BOOL bRet = Process32FirstW(hTool32, &psi);
    if (!bRet)
    {
        printf("Process32FirstW error!\n");
        return false;
    }
    printf("PID    EXE:\n");
    do
    {
        printf("%4d   %S\n", psi.th32ProcessID, psi.szExeFile);
    } while (Process32NextW(hTool32, &psi));
    return true;
}


int main()
{
    EnumProcess();
    return 0;
}

======================

// 05.遍历线程.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <TlHelp32.h>
bool EnumThreads(DWORD dwPID) {
    // 1. 先创建快照
    HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, NULL);
    if (INVALID_HANDLE_VALUE == hTool32)
    {
        printf("快照error!\n");
        return false;
    }
    // 2. 开始遍历进程
    THREADENTRY32 ti = { sizeof(THREADENTRY32) };
    BOOL bRet = Thread32First(hTool32, &ti);
    if (!bRet)
    {
        printf("Thread32First error!\n");
        return false;
    }
    printf("tID    pid:\n");
    do
    {
        if (ti.th32OwnerProcessID == dwPID)
        {
            printf("%6d   %6d\n", ti.th32ThreadID, ti.th32OwnerProcessID);
        }
    } while (Thread32Next(hTool32, &ti));
    return true;
}

int main()
{
    EnumThreads(7568);
    return 0;
}

=====================

// 06.遍历模块.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <TlHelp32.h>
bool EnumModule(DWORD dwPID) {
    // 1. 先创建快照
    HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
    if (INVALID_HANDLE_VALUE == hTool32)
    {
        printf("快照error!\n");
        return false;
    }
    // 2. 开始遍历进程
    MODULEENTRY32W mi = { sizeof(MODULEENTRY32W) };
    BOOL bRet = Module32First(hTool32, &mi);
    if (!bRet)
    {
        printf("Module32First error!\n");
        return false;
    }
    printf("baseaddr    size       handle     name:\n");
    do
    {
        printf("%08x   %08x    %08x   %S\n", 
            (DWORD)mi.modBaseAddr,
            mi.modBaseSize,
            mi.hModule,
            mi.szModule);
    } while (Module32NextW(hTool32, &mi));
    return true;
}

bool EnumProcess() {
    // 1. 先创建快照
    HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (INVALID_HANDLE_VALUE == hTool32)
    {
        printf("快照error!\n");
        return false;
    }
    // 2. 开始遍历进程
    PROCESSENTRY32W psi = { sizeof(PROCESSENTRY32W) };
    BOOL bRet = Process32FirstW(hTool32, &psi);
    if (!bRet)
    {
        printf("Process32FirstW error!\n");
        return false;
    }
    printf("PID    EXE:\n");
    do
    {
        //printf("%4d   %S\n", psi.th32ProcessID, psi.szExeFile);
        EnumModule(psi.th32ProcessID);
    } while (Process32NextW(hTool32, &psi));
    return true;
}


int main()
{
    EnumProcess();
    return 0;
}

==================

// 07.伪句柄转真正句柄.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>

DWORD WINAPI ChildThread(PVOID pParam) {
    HANDLE hThreadParent = (HANDLE)pParam;
    FILETIME stcCreationTime, stcExitTime;
    FILETIME stcKernelTime, stcUserTime;
    GetThreadTimes(hThreadParent, &stcCreationTime,
        &stcExitTime, &stcKernelTime, &stcUserTime);
    return 0;
}

DWORD WINAPI ShowParentTime() {
    HANDLE hThreadParent = GetCurrentThread();
    // 把伪句柄转换成真正的句柄值
    HANDLE hTranslate = 0;
    DuplicateHandle(
        GetCurrentProcess(),//你要转换的句柄值所在的进程句柄
        hThreadParent,// 你要转换哪个句柄
        GetCurrentProcess(),// 你要转换的句柄给哪个进程
        &hTranslate,
        DUPLICATE_SAME_ACCESS,// 一样的权限
        NULL,
        DUPLICATE_SAME_ACCESS);
    CreateThread(NULL, 0, ChildThread,
        (PVOID)hTranslate, 0, NULL);
    return 0;
}

int main()
{
    FILETIME stcCreationTime, stcExitTime;
    FILETIME stcKernelTime, stcUserTime;
    GetThreadTimes(GetCurrentThread(), &stcCreationTime,
        &stcExitTime, &stcKernelTime, &stcUserTime);
    ShowParentTime();
    system("pause");
    return 0;
}

相关文章

  • 程序员的自我修养 Liunx多线程

    Liunx的多线程   Windows 对进程和线程的实现如同教科书一般标准,Windows内核有明确的线程和进程...

  • 03给女朋友讲讲并发编程-进程与线程的监控

    一、线程运行-查看和杀死(Windows) 1.查看进程列表 查看指定名称进程列表 2.杀死指定进程 二、线程运行...

  • java多线程基础

    进程与线程的区别 进程 进程简单的来说就是在内存中运行的应用程序,一个进程可以启动多个线程。比如在windows中...

  • Windows Internals - Chapter 4 Th

    线程 主要探讨Windows中线程和线程调度的基础数据结构和算法 进程和线程的关系 进程是计算机资源分配的基本单位...

  • Win32多线程处理技术【线程的创建】

    线程的创建 线程内核对象 线程的终止 线程的优先级 Windows程序的执行单元 多线程 进程---主线程---辅...

  • Python 多线程编程

    多线程编程 进程(process)和线程(thread) Linux 和 windows 是多任务操作系统, 这就...

  • 程序中所说的线程、进程, 和CPU的线程有什么区别?

    解答一:程序说的线程进程是软件的概念。一个程序就是一个进程,每个进程至少1个线程(在windows系统是这样)。 ...

  • JavaScript 线程与进程

    进程 程序的一次执行,它占有一片独有的内存空间。可以通过windows任务管理器查看进程。 线程 线程是进程内的一...

  • 多线程TOP50

    什么是线程? 线程是CPU的最小执行单元,当依附在进程之下的。程序就是一个进程,比如windows的.exe程序,...

  • Tomcat的并发能力

    一、一些限制 Windows 每个进程中的线程数不允许超过 2000 Linux 每个进程中的线程数不允许超过 1...

网友评论

      本文标题:windows进程线程

      本文链接:https://www.haomeiwen.com/subject/vcmlaftx.html