[英]Non-blocking keyboard input x64 windows assembly / c++
我需要在Windows x64匯編中的代碼將:
a)以非阻塞方式從用戶鍵盤(stdin)讀取數據。
b)檢查是否有數據的方式,所以我知道我應該已經調用readFile還是跳過此步驟
c)修正我到目前為止所做的實現
到目前為止,我嘗試了功能PeekNamedPipe,但它似乎並不起作用。 這是我到目前為止的代碼:
mov rcx, dword -10
sub rsp, 28h
call GetStdHandle
add rsp, 28h
mov [std_in_handle], rax
sub rsp, 30h
mov rcx, qword [std_in_handle]
mov rdx, qword 0
mov r8d, dword 0
mov r9, qword 0
mov qword [rsp+0x20], bytes_available
mov qword [rsp+0x28], 0
call PeekNamedPipe
add rsp, 30h
cmp dword [bytes_available], dword 0
je .skip_reading_input
sub rsp, 28h
mov rcx, qword [std_in_handle]
mov rdx, qword input_char
mov r8d, dword 1
mov r9, qword BytesRead
mov qword [rsp+0x20], 0
call ReadFile
add rsp, 28h
.skip_reading_input
事實是,即使我在鍵盤上鍵入內容,bytes_available中的值也始終為0,因此始終會跳過readfile。
我設法使用此功能解決了我的特殊問題
外部GetAsyncKeyState
自上次調用該函數以來,它具有返回鍵或返回鍵時返回給定值的選項-因此我在程序開始時調用了此函數一次,然后檢查自該時間以來是否已調用該函數。 但是,使用這種方法時會遇到很多問題,因此我將盡快檢查其他人建議的問題,並可能會發布更好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.