草庐IT

c++ - 未调用 ReadFileEx() 完成例程

我正在编写一个类(PipeReader)来处理Windows上的命名管道。该类使用异步IO从管道读取。到目前为止,我一直在没有事件循环的线程中使用该类,我不得不等待IO完成使用SleepEx()并且它起作用了。现在我有第二个带有事件循环的线程和PipeReader类的第二个实例,但是从未调用第二个实例的完成例程。调用CreateFile():handle=CreateFile(fullServerName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);调用ReadFileEx():B

c++ - 如何设置c++应用程序窗口的图标和任务栏的图标?

如何为应用程序设置这些图标?我正在使用visualstudio。应用程序窗口上的图标是空的。我已经在项目中添加了一个project.rc文件,并在其中添加了图标资源当我将其停靠到任务栏时,它会在任务栏上显示正确的图标。 最佳答案 假设您正在以某种形式处理WIN32API,经过快速搜索后我发现了2种方法。这绝不是可用方法的完整列表。1.将用于注册主窗口的WNDCLASSEX结构的hIcon成员设置为适当的值,如以下代码所示。(其中EXAMPLE_ICON是您的图标资源)WNDCLASSEXwcex={};wcex.cbSize=siz

C fopen 到特定目录

所以我正在尝试创建一个程序,该程序将根据系统是Windows还是Linux更改fopen()函数的文件目录。在我的主要功能中,我通过确定操作系统#ifdef__unixprintf("linuxmachine\n");windows=false;linux=true;#endif#ifdef_WIN32printf("windowsmachine\n");windows=true;linux=false;#endif然后在我打开文件的函数中FILE*fp,*fpo;if((windows==true)&&(linux==false)){fp=fopen("/temp/coursein/

使用 getchar() 读取输入时 Ctrl-Z 表现异常

这个问题在这里已经有了答案:Whydoesn'tgetchar()recognisereturnasEOFontheconsole?(8个答案)关闭5年前。我无法理解CtrlZ的工作方式。请解释以下输出并说明原因。#includeintmain(void){intch,i=0;while((ch=getchar())!=EOF)i++;printf("\n%d",i);return0;}输入1:my^Z输出1:3输入2:my^Zmymy^Z输出2:6输入3:my^Zmymy^Z^Z输出3:6

c - 只需双击即可运行使用 MSYS2 构建的 GTK+ 应用程序

我有一个simplewindow应用程序,使用MSYS2构建,我希望它能够在MSYS2MinGW外壳之外运行,只需双击该应用程序即可。问题是,当我想运行应用程序时,它必须通过MSYSMinGW提示,否则会返回错误。Thecodeexecutioncannotproceedbecauselibgio-2.0-0.dllwasnotfound.Reinstallingtheprogrammayfixthisproblem我尝试包括(通过将文件复制到我的exe的位置)libgio-2.0-0.dll并出现更多错误,表示缺少库。我也包含了这些文件。我已经展示了我在下面包含的文件:libffi-

c - 服务和应用程序之间的命名管道通信

所以我有一个在启动时启动的服务,我有一个应用程序放在启动文件夹中。因此客户端有时会很晚才连接到命名管道的服务器。这是我服务中的代码。hPipe=CreateNamedPipe(TEXT("\\\\.\\pipe\\popupPipe"),PIPE_ACCESS_DUPLEX|PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,//FILE_FLAG_FIRST_PIPE_INSTANCEisnotneededbutforcesCreateNamedPipe(..)tofailifthepipealreadyexists...PIPE_WAIT,1,1024*16,102

c++ - 有没有办法接收有关在 Windows 中启动的进程的事件?

长话短说我用C++编写了一个程序来关闭所有在我的程序启动时未运行的启动的"new"程序。目前,我通过捕获所有PID然后根据此列表不断检查所有已注册的应用程序来做到这一点。那些不在我名单上的人我会尝试关闭/杀死。对于这样一个简单的任务,这是非常CPU密集型的。有没有办法接收某种Windows事件,这样我就不需要非常活跃的线程?我找到了this钩子(Hook),它可能会做我需要它做的事情,但它似乎适合其他目的,而不是我需要的。简而言之:我可以在进程启动之后/之前立即从Windows接收到事件吗? 最佳答案 理想情况下,您会在用户模式下执

c - 当我按下某个键时做些什么?

如何让程序识别我按下的某些键?理解上下文:我想用C做一个游戏(非常基本的游戏),所以为了移动物体,我想按下(WASD),我知道如何移动它,但我不知道如何当按下其中一个键时,让程序明白我想执行某个操作。例如:if(key=="A"){x++}我知道它不会像那样工作,但至少是类似的。 最佳答案 #include#include/*getch()andkbhit()*/intmain(){charc;for(;;){if(kbhit()){c=getch();if(c=='c'){printf("%c\n",c);//morecodehe

c - 为什么 `fseek(..., 0, SEEK_CUR)` 在 Windows 上失败?

我已经测试了以下C代码#includeintmain(){FILE*file=fopen("ans.txt","r+");printf("%ld",ftell(file));//prints0fgetc(file);printf("%ld",ftell(file));//prints-18printf("%d",fseek(file,0,SEEK_CUR));//-1printf("%ld",ftell(file));//prints150fclose(file);return0;}在win10上使用MinGW-W64(gcc版本7.1.0(x86_64-posix-seh-rev0,

C malloc + free 不断增加内存占用

我有一个处理大量数据(100+KB)的C应用程序。我正在使用malloc()来分配所需的内存。(char*)malloc(argLen+18+2)执行后,我使用free释放分配的内存。据我所知,由于某些原因,释放的内存没有返回给操作系统。我的问题是,当我再次运行该程序时,它并没有重新使用分配的内存,而是不断增加我的应用程序的内存使用量。编辑:对于造成的困惑,我深表歉意。该进程是一个WebSocket服务。除非有意停止,否则它不会终止。这是否意味着该进程将继续增加其内存使用量并且不会释放分配的内存,除非我手动重新启动它? 最佳答案 I