lr_stop_transaction_instance()
終止由其句柄指定的事務實例的報告統計信息。
double lr_stop_transaction_instance(long parent_handle);
參數說明:
parent_handle:唯一的事務句柄。
調用lr_stop_transaction_instance後,由“get”事務函數返回的統計信息只反映直到調用的數據,直到調用lr_resume_transaction_instance。指定的事務實例必須已使用lr_start_transaction_instance打開。
但是,數據收集不會中斷。在調用lr_resume_transaction_instance之後,“get”函數自事務實例開始後返回所有數據。此外,分析測試時的最終結果將反映總值,包括交易停止和恢復之間的期間。
如果未調用lr_resume_transaction_instance,則最終結果僅反映到調用lr_stop_transaction_instance之前的統計信息。
parent_handle是從對創建實例的lr_start_transaction_instance的調用返回的值。
lr_stop_transaction_instance和lr_resume_transaction_instance可用於有條件地收集有關開始或所有事務的信息。
請注意,在調用lr_stop_transaction_instance時,您將無法區分迭代之間的分析,也可能無法區分迭代。
要更靈活地有條件地記錄事務時間,請參閱lr_start_sub_transaction,lr_set_transaction和lr_start_timer。
lr_stop_transaction_instance返回實例的持續時間(以秒爲單位)。
示例:lr_stop_transaction_instance和lr_resume_instance
以下示例顯示lr_stop_transaction_instance和lr_resume_transaction_instance的效果。
StopResumeInstance()
{
long hdl;
int i, baseIter = 100;
char dude[200];
double dur;
hdl = lr_start_transaction_instance("Stop%Start", 0);
/* Do part of business process. Represented
here by loop to ensure that some
time passes. */
for (i=0; i< (10 * baseIter); ++i)
sprintf(dude,
"Artificially add elapsed time = %d", i);
//Add 1/2 second waste time
lr_wasted_time(500);
/* Output the duration to this point (0.343750 seconds)
with transaction active. */
lr_output_message("First time duration = %f, Waste = %f",
lr_get_trans_instance_duration(hdl),
lr_get_trans_instance_wasted_time(hdl));
// Stop the transaction
dur = lr_stop_transaction_instance(hdl);
lr_output_message("Duration from stop call = %f", dur);
//Add 1/2 second waste time
lr_wasted_time(500);
/* Output the duration to this point (0.359375 seconds)
with transaction stopped. */
lr_output_message("Immediately after stop = %f, Waste = %f",
lr_get_trans_instance_duration(hdl),
lr_get_trans_instance_wasted_time(hdl));
// Ensure that some time passes
for (i=0; i< (10 * baseIter); ++i)
sprintf(dude,
"Artificially add elapsed time = %d", i);
/* Output the duration to this point (0.359375 seconds)
with transaction still stopped but
more time passed. Note that time is the same.
The time spent in the loop while the transaction
was stopped is not reported. */
lr_output_message("After stop and loop = %f, Waste = %f",
lr_get_trans_instance_duration(hdl),
lr_get_trans_instance_wasted_time(hdl));
// Resume the transaction
lr_resume_transaction_instance(hdl);
/* Note that with the transaction resumed,
all the time passed since the start is
reported (0.781250 seconds), including the time spent
in the loop while the transaction was stopped. */
lr_output_message("After resume time = %f, Waste = %f",
lr_get_trans_instance_duration(hdl),
lr_get_trans_instance_wasted_time(hdl));
// Add time to duration
for (i=0; i< (10 * baseIter); ++i)
sprintf(dude,
"Artificially add elapsed time = %d", i);
/* Total time reported (1.140625 seconds) */
lr_output_message("After resume and loop = %f, Waste = %f",
lr_get_trans_instance_duration(hdl),
lr_get_trans_instance_wasted_time(hdl));
// End transaction
lr_end_transaction_instance(hdl, LR_AUTO);
return 0;
}輸出:
第一持續時間= 0.609375,廢物= 0.500000
通知:事務停止%開始停止。
從停止呼叫的持續時間= 0.625000
停止後立即= 0.625000,廢物= 0.500000
停止和循環= 0.625000後,Waste = 0.500000
通知:事務停止%開始繼續。
在恢復時間= 1.265625之後,Waste = 1.000000
在恢復和循環= 1.875000之後,Waste = 1.000000
通知:事務停止%開始以通過狀態結束(持續時間:1.8750浪費時間:1.0000)。