问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

windows下c++多线程的实现

发布网友 发布时间:2022-04-25 16:04

我来回答

2个回答

热心网友 时间:2023-10-15 19:30

我最近写的,别看regist()函数就满足你的要求:

//
//Created by ABacker on 5/31/2016 --VS2013
//
//打开此程序,3秒后关闭显示器并退出程序
//此程序会在桌面"我的电脑"右键中添加"关闭显示器"选项
//

#include<thread>
#include<vector>
#include<conio.h>
#include<tchar.h>
#include<stdio.h>
#include<windows.h>
#include<iostream>

using namespace std;

#define HIDE 1// 0 ---- 非隐藏运行,输出到标准设备
// 1 ---- 隐藏运行,输出到Log.txt

#if(HIDE)
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//隐藏运行
#endif

//修改注册表,在桌面"我的电脑"右键中添加"关闭显示器"选项
bool regist() {
HKEY hkey, closekey, cmdkey;
LPTSTR path = TEXT("CLSID\\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\shell");

//获取此程序全路径
char exePath[MAX_PATH];
GetMoleFileNameA(NULL, (LPSTR)exePath, sizeof(char)*MAX_PATH);

//char * to wchar_t *
int num = MultiByteToWideChar(0, 0, exePath, -1, NULL, 0);
wchar_t *_exePath = new wchar_t[num];
MultiByteToWideChar(0, 0, exePath, -1, _exePath, num);

//在注册表path下创建 Key:"关闭显示器",在"关闭显示器"下创建Key:"command",设置"command"下的默认值为REG_EXPAND_SZ:_exePath
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CLASSES_ROOT, path, 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hkey)) {
if (ERROR_SUCCESS == ::RegCreateKeyEx(hkey, TEXT("关闭显示器"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &closekey, NULL)) {
if (ERROR_SUCCESS == ::RegCreateKeyEx(closekey, TEXT("command"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &cmdkey, NULL)) {
if (ERROR_SUCCESS == ::RegSetValueEx(cmdkey, TEXT(""), 0, REG_EXPAND_SZ, (CONST BYTE *)_exePath, sizeof(wchar_t)*num)) {
return true;
}
else printf("error:regist setvalue!\n");
::RegCloseKey(cmdkey);
}
else printf("error:regist create key command!\n");
::RegCloseKey(closekey);
}
else printf("error:regist create key 关闭屏幕!\n");
::RegCloseKey(hkey);
}
else printf("error:regist open key!\n");

delete[] _exePath;

return false;
}

//新线程入口
DWORD WINAPI ThreadEntrance(LPVOID p) {
if (!regist())printf("regist false!\n");

printf("The screen will be off in 3s...\n");

Sleep(3000);

SendMessage(FindWindow(0, 0), WM_SYSCOMMAND, SC_MONITORPOWER, 2);//关闭显示器

#if!(HIDE)
printf("It will be closed in 10s...\n");
Sleep(10000);
#endif

ExitThread(0);

return 0;
}

int main() {
#if(HIDE)
freopen("Log.txt", "w", stdout);
#endif

//在新线程中运行是为了防止程序打开时处于无响应Sleep状态使鼠标指针变为等待
DWORD ID;
HANDLE hand = CreateThread(0, 0, ThreadEntrance, NULL, 0, &ID);

WaitForSingleObject(hand, INFINITE);//等待线程退出

return 0;
}

热心网友 时间:2023-10-15 19:30

CreateThread( )
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
焦作有哪些旅行景点值得一去? 河南穿古装去的地方 AE入门从学会套模板开始,AE模板套用简易教程,看起来复杂的AE其实也很... ae怎么套用模板ae模版的使用方法 北京通州区有什么好玩的地方吗 请问现在有哪些看电影的网站?越多越好~~ 帮初中女儿请假一天讲身体不适,班主任却跟别的老师讲她得了大病,该如何... 梦见家中被盗空只剩一件绿色衣的预兆 梦见美丽沙穗 美版4s内置卡贴有什么危害? 如何用Photoshop自动混合图层 怎样去除冰箱的氟利昂? 我想把旧冰箱中的氟利昂去除,把后面的金属管线拆掉。 Ps已点击了图层0和图层1后为什么不能生成自动混合图层? PS求助为什么自动混合图层不成功 批处理变量定义及循环语句,在线等批处理程序 海尔冰箱几年不用需清洗管道和加氟吗? 冰箱那个装氟利昂的管子漏了,维修一下要多少钱 怎样编写一个批处理程序备份当前系统的IP配置信息到C:\ipbak.txt_百度... 怎样把冰箱里的氟利昂清理出来? WIN7 共享文件重启后 自动失效 修冰箱没有痰气怎么清洁管路 压缩机往管路打压可以保压检漏吗? 求教,怎么使用bat,添加windows凭据 冰箱管道用那个制冷剂清洗呢?怎么清洗 hyper-v怎么远程登录 求救WINDOWS SERVER 2003 命令行 常用命令!!! 域服务器上如何使用组策略清除windows凭据 BAT批处理如何判断用户凭据是否存在? 清除登陆局域网保存的密码 dos批处理下的命令:cmdkey命令和net user命令 怎么在淘宝上秒杀物品! 别的电脑怎么访问我的虚拟机 冰箱冷气管破了,漏气了,还能修好吗? 梦到捡鸡蛋、吃鸡蛋 PS换脸用自动混合图层为什么提示命令裁切无效或者混合后选区是白色? 共享文件 重启后失效 ps 换脸用自动混合图层,最后出现的结果却不符合人意,求大神指点!! 冰箱管路破损造成氟利昂泄漏 怎么修? 求所有DOS命令提示符!急用 冰箱维修高压管有烂的地方,修理加氟后压缩机管子结霜,而且全天工作? 我想用ps把两张图混合起来,可是为什么点不了自动混合图层?我已经选中了两个图层 - 信息提示 求助:ps的自动混合图层 双方都成家了,还经常梦见以前喜欢我的男生? ps cs3中 自动混合图层 在哪,怎么找不到啊 冰箱漏氟就需要换整体管路吗 ?这种修法太落后了吧?用冰箱的代价太高了... 为什么我老是梦见小时候喜欢我的男生啊 Photoshop图层混合模式不可用 最近老是梦见以前喜欢的人喜欢我还主动吻我,可是我已经有男朋友了 ps自动混合图层和camera raw叠加区别 心理测试老是梦见以前喜欢我的男生