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...