- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我使用创建的缓冲区调用 SetConsoleActiveScreenBuffer() 时,它似乎使 ReadConsole 停止使用 ERROR_SHARING_VIOLATION。我检查了句柄权限,据我所知,它们是正确的。
如果我注释掉 SetConsoleActiveScreenBuffer 行,输入将完美运行。我可能在这里做错了什么?
我还尝试过使用 ReadFile 而不是 ReadConsole,并使用 CreateFile 而不是 GetStdHandle 获取输入缓冲区。两种方式,都会出现同样的错误。
#include <Windows.h>
int main()
{
void* oldScreenBuffer;
void* screenBuffer;
void* inputBuffer;
char chBuffer[16];
DWORD numReads;
int err = 0;
inputBuffer = GetStdHandle(STD_INPUT_HANDLE);
//inputBuffer = CreateFile(TEXT("CONIN$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
oldScreenBuffer = GetStdHandle(STD_OUTPUT_HANDLE);
screenBuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
//commenting out the next line makes input work
err = SetConsoleActiveScreenBuffer(screenBuffer);
while(1){
err = ReadConsole(inputBuffer, chBuffer, 15, &numReads, NULL);
if(!err){
//returns error 32 (ERROR_SHARING_VIOLATION)
err=GetLastError();
}
if(chBuffer[0]=='q') break;
}
SetConsoleActiveScreenBuffer(oldScreenBuffer);
return 0;
}
最佳答案
它是屏幕缓冲区共享模式的 0。我之前完全错过了。我将其更改为 FILE_SHARE_READ | FILE_SHARE_WRITE,并且有效。谢谢@Ben。
关于windows - SetConsoleActiveScreenBuffer 使 ReadConsole 返回 ERROR_SHARING_VIOLATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852978/
为什么单个线程不能使用 CreateFile 和对进程的独占文件锁 打开同一个文件 tqize?以下示例将在同一线程第二次尝试打开文件时失败,并出现 ERROR_SHARING_VIOLATION 异
我使用 CreateFile api,有时它随机失败并出现错误:ERROR_SHARING_VIOLATION。 我用谷歌搜索了一下,几乎没有关于这个错误的信息。奇怪的是下次打开同一个文件还是蛮开心的
我正在尝试编写一个价格监听器。 数据作为“推送”响应到达,即:分块传输编码。我决定使用 http 服务器 api,因为异步 wininet 和 winHTTP 读取数据 api 都会在短时间内没有数据
当我使用创建的缓冲区调用 SetConsoleActiveScreenBuffer() 时,它似乎使 ReadConsole 停止使用 ERROR_SHARING_VIOLATION。我检查了句柄权限
我是一名优秀的程序员,十分优秀!