Rust CTP 中非同步處理

2021-09-12 08:25:25 字數 2108 閱讀 7662

ctp中,client會收到thost發來的不同型別的資訊,包括有來自**、下單,交易,撤單、查持倉和查合約狀況等資訊:

onrtnmarketdata 

onrtnorder

onrtntrade

onerrrtnorderaction

onrsporderinsert

onrsporderaction

onrspqryinvestorpositiondetail

onrtninstrumentstatus

這些資訊是通過以上的函式非同步推送的,當然做策略時,需要把他們同步。

一、資訊分發與策略下單

需要考慮具體情況:

乙個策略或乙個策略組(不同引數組)需要與thost互動;這樣,就會在不同的執行緒間產生大量的不同策略的訊息。

(1)這些訊息要有序地接收和分發,比如,訂閱的資訊、交易要與策略一 一相匹配;

(2)在策略與thost傳送訂單時,需要同步處理;

1、接收thost非同步的訊息

下面是試驗**:

use std::thread;

use std::sync::mpsc::channel;

use std::collections::vecdeque;

use std::time::duration;

use rand::rng;

use std::sync::mpsc::receiver;

# [derive(debug)]

struct md(u32);

# [derive(debug)]

struct insertorder(u32);

# [derive(debug)]

struct cancelorder(u32);

# [derive(debug)]

//模擬thost傳過來的不同的值;

enum tradedata

//把rx作為引數傳入

fn get_data(rx:&receiver)",rx.recv().unwrap());

}}fn main() n: thread id :",rand_value,n,i);

thread::sleep(duration::from_millis(100));

match rand_value ;

}});

}println!("main=>");

get_data(&rx);

thread::sleep(duration::from_millis(500000));

}

下面是模擬的效果:非同步收thost訊息,另乙個執行緒非同步處理,可以起分發作用。

c#中,可以用 postmessage+窗體訊息函式(wndproc),即策略組(strateggroup)postmessage訊息要發給各自策略內的視窗,策略中的wndproc接收相應的訊息。

2、同步不同策略的下單/撤單

use std::sync::
比如:取唯一且自增報單引用,下面是試驗**:

use std::thread;

use std::sync::;

use std::time::duration;

use rand::rng;

fn main()",*s_clone.lock().unwrap());

}).join();

}println!("request_id :",*s.lock().unwrap());

thread::sleep(duration::from_millis(500000));

}

可以看出,這個鎖在100個執行緒中是起作用的。

AsyncTask 非同步處理

1,object,用於指定doinbackground的引數 2,integer,用於指定onprogressupdate的引數 3,uri,用於指定doinbackground的返回型別和onpostexecute的引數型別 public class updatetask extends asyn...

AsyncTask非同步處理

非同步處理的目的 完成任務的同時不阻塞主線程 ui執行緒 涉及handler looper message thread四個物件。實現非同步的流程 主線程啟動thread 子執行緒執行並生成message looper獲取message並傳遞給handler handler逐個獲取message並進...

非同步處理總結

asynctask入門 intentservice 今天要說的intentservice提供的功能也很類似,都是來處理非同步工作的。工作流程也非常簡單,客戶端通過startservice intent 方法來呼叫,服務啟動後,開啟worker執行緒來順序處理intent的任務。注意這裡,乙個inte...