2015-09-03 37 views
0

我正在嘗試編寫一個鼠標事件偵聽器。這是我的方法,在我開始寫作之前,能否告訴我這是否可行?我正在寫ctypes,所以如果我輸入這一切(幾天),然後發現它沒有工作的時間損失。XGrabPointer投票直到下一個事件或管道

我的目標是,我應該能夠通過管道取消調查。這是我的方法:

  1. 在另一個線程調用XThreadsInit
  2. 打開XDisplay display
  3. XGrabPointerdisplay
  4. 獲取文件描述符ConnectionNumber(display)
  5. 與管道連接這是在主線程
  6. 做做一個pselect沒有超時timeout設置爲null對管和fd從4

這是正確的做法嗎? 謝謝

+1

'XGrabPointer'防止其他客戶端使用鼠標。 –

+0

謝謝@n.m。所以上面的算法對於輪詢直到下一個受監視事件或管道中斷的同步/阻塞方法而言是不準確的? – Noitidart

回答

1

如果你正在使用線程共享線程之間的變量。當輪詢必須中止時使用設置的全局變量要簡單得多,然後在監視線程中創建一個緊密的循環來檢查該變量並在pselect()中使用一個短暫超時。這可能會造成短暫的延遲,但如果您保持超時(例如100毫秒),則幾乎不會顯而易見且仍然有效。

+0

謝謝JvO原諒我錯過了這個評論:)我真的需要避免短暫的延遲:(需要它無限期,只能通過管道打斷人們推薦'pthreads' – Noitidart

+0

好吧,使用線程是一種方法...如果你需要的一切要做的是發送一個字節到一個套接字,以便你的poll()返回,這個字節來自哪裏並不重要。可能是一個線程,一個子進程是分叉的(),或者甚至是一個使用網絡套接字或者Unix管道,線程的問題在於它們很難避免競爭條件,但是如果不需要延遲,那麼一定要試一試。 – JvO

相關問題