首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

TC (Turbo C) 鼠標編程:中斷調用、按鍵檢測與多線程模擬

     編輯:關於C語言

鼠標中斷接口

通過寄存器 _AX, _BX, _CX, _DX 調用 int 0x33 實現鼠標操作。常用功能:

  • _AX=0:復位/檢測驅動。
  • _AX=1:顯示光標。
  • _AX=2:隱藏光標。
  • _AX=3:獲取狀態與座標(_BX 按鍵,_CX/_DX X/Y)。
  • _AX=4:設置光標位置。
  • _AX=7/8:設置水平/垂直範圍限制。

封裝函數示例

int LeftPress() { _AX=3; geninterrupt(0x33); return _BX & 1; }
int RightPress() { _AX=3; geninterrupt(0x33); return _BX & 2; }
void MouseGetXY() { _AX=3; geninterrupt(0x33); MouseX=_CX; MouseY=_DX; }

主循環與按鍵抖動問題

while(1) {
    if (LeftPress()) { MouseGetXY(); printf("Left at (%d,%d)\n", MouseX, MouseY); sleep(1); }
    if (RightPress()) { MouseGetXY(); printf("Right at (%d,%d)\n", MouseX, MouseY); sleep(1); }
    if (kbhit() && bioskey(0)==0x011b) break; // ESC 退出
}

問題: 未加 sleep(1) 時,單次點擊觸發多次打印。
原因: 輪詢速度極快,鼠標按下狀態持續多個循環迭代。
解決: 處理完畢後 sleep(1) 或標記狀態等待釋放。

多線程缺失

TC 無原生多線程庫,僅能靠輪詢模擬並發。若需真多線程,建議遷移至現代編譯器(如 GCC/Clang)配合 pthreads 或 Windows API。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved