Browse Source

移除多线程读取

caner 1 year ago
parent
commit
b2cfd2e9aa
2 changed files with 8 additions and 42 deletions
  1. 7 41
      src-tauri/src/lib.rs
  2. 1 1
      src/pages/room/component/steering.vue

+ 7 - 41
src-tauri/src/lib.rs

@@ -1,13 +1,6 @@
-use std::sync::{Arc, Mutex, atomic::{AtomicBool, Ordering}};
 use std::thread;
 use std::thread;
 use hidapi::HidApi;
 use hidapi::HidApi;
 use tauri::{Emitter,Window};
 use tauri::{Emitter,Window};
-// 全局停止标志和线程句柄
-lazy_static::lazy_static! {
-    static ref STOP_SIGNAL: AtomicBool = AtomicBool::new(false);
-    static ref THREAD_HANDLE: Mutex<Option<thread::JoinHandle<()>>> = Mutex::new(None);
-}
-// G923设备标识
 const LOGITECH_VID: u16 = 0x046D;  // 罗技厂商ID
 const LOGITECH_VID: u16 = 0x046D;  // 罗技厂商ID
 const G923_PIDS: &[u16] = &[
 const G923_PIDS: &[u16] = &[
     0xC262,  // G923 PlayStation
     0xC262,  // G923 PlayStation
@@ -18,8 +11,6 @@ const G923_PIDS: &[u16] = &[
 // 读取G923数据
 // 读取G923数据
 #[tauri::command]
 #[tauri::command]
 fn start_reading_data(window: Window) -> Result<(), String> {
 fn start_reading_data(window: Window) -> Result<(), String> {
-    // 停止现有线程
-    stop_reading_data();
     // 初始化HID API
     // 初始化HID API
     let api = HidApi::new().map_err(|_| "HID设备初始化失败".to_string())?;
     let api = HidApi::new().map_err(|_| "HID设备初始化失败".to_string())?;
     // 自动检测设备
     // 自动检测设备
@@ -30,58 +21,33 @@ fn start_reading_data(window: Window) -> Result<(), String> {
         device_info.product_id());
         device_info.product_id());
     // 打开设备
     // 打开设备
     let device = device_info.open_device(&api).map_err(|e| format!("无法打开设备: {}", e))?;
     let device = device_info.open_device(&api).map_err(|e| format!("无法打开设备: {}", e))?;
-    // 克隆Arc用于线程
-    let device = Arc::new(Mutex::new(device));
-    let thread_device = Arc::clone(&device);
-    let thread_window = window.clone();
     // 启动读取线程
     // 启动读取线程
-    let handle = thread::spawn(move || {
+    thread::spawn(move || {
         let mut buf = [0u8; 64];
         let mut buf = [0u8; 64];
         loop {
         loop {
-            // 检查停止标志
-            if STOP_SIGNAL.load(Ordering::SeqCst) {
-                println!("停止读取线程");
-                break;
-            }
-
             // 使用带超时的读取(100ms)
             // 使用带超时的读取(100ms)
-            let res = match thread_device.lock().unwrap().read_timeout(&mut buf, 100) {
+            let res = match device.read_timeout(&mut buf, 100) {
                 Ok(n) => n,
                 Ok(n) => n,
                 Err(e) => {
                 Err(e) => {
                     eprintln!("读取数据失败: {}", e);
                     eprintln!("读取数据失败: {}", e);
-                    continue;
+                    break;
                 }
                 }
             };
             };
 
 
             // 处理&发送数据
             // 处理&发送数据
             let data = &buf[..res];
             let data = &buf[..res];
-            let _ = thread_window.emit("g923-data", format!("{:?}", data));
+            let _ = window.emit("g923-data", format!("{:?}", data));
         }
         }
-
-        // 关闭设备
-        drop(thread_device.lock().unwrap());
     });
     });
-    // 存储线程句柄
-    *THREAD_HANDLE.lock().unwrap() = Some(handle);
-    // return
-    Ok(())
-}
 
 
-// 设置停止
-#[tauri::command]
-fn stop_reading_data() {
-    STOP_SIGNAL.store(true, Ordering::SeqCst);
-    if let Some(handle) = THREAD_HANDLE.lock().unwrap().take() {
-       let _ = handle.join().map_err(|_| "无法等待线程退出".to_string());
-    }
-    STOP_SIGNAL.store(false, Ordering::SeqCst);
+    Ok(())
 }
 }
 
 
 pub fn run() {
 pub fn run() {
     tauri::Builder::default()
     tauri::Builder::default()
         .plugin(tauri_plugin_shell::init())
         .plugin(tauri_plugin_shell::init())
         .plugin(tauri_plugin_mqtt::init())
         .plugin(tauri_plugin_mqtt::init())
-        .invoke_handler(tauri::generate_handler![start_reading_data,stop_reading_data])
+        .invoke_handler(tauri::generate_handler![start_reading_data])
         .run(tauri::generate_context!())
         .run(tauri::generate_context!())
         .expect("error while running tauri application");
         .expect("error while running tauri application");
-}
+}

+ 1 - 1
src/pages/room/component/steering.vue

@@ -39,7 +39,7 @@ invoke('start_reading_data').then(() => {
   listen('g923-data', (event) => {
   listen('g923-data', (event) => {
     const data = event.payload
     const data = event.payload
     const parsedData = parseG923Data(data)
     const parsedData = parseG923Data(data)
-    console.log('解析后的 G923 数据:', data, parsedData)
+    console.log('解析后的 G923 数据:', event, parsedData)
   })
   })
 }).catch((er) => {
 }).catch((er) => {
   show.value = false
   show.value = false