以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- [求助]c++接口中的静态变量. (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=25186) |
-- 作者:oceanjztwind -- 发布时间:2012/9/3 19:24:30 -- [求助]c++接口中的静态变量. 每一个tick数据接收都会刷新一遍 想要一个变量只在DLL公式加载时才初始化一次,也不随K线增加而重新初始化 想测试参数bool test_param=true 以下写法应该怎样改进 // StockFunc.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "StockFunc.h" #include "stdio.h" #include "vector" #include <fstream> #include<iostream> #include<string> #include <time.h> using namespace std; /////////////////////////////////////// static bool test_param = true; /////////////////////////////////////// BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
) { switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break; } return TRUE; } //DLL公式的运行模式,系统系统调用该DLL时,告知公式系统该DLL公式运行在何种模式下 //返回值:
0本DLL运行序列模式 1本DLL运行逐周期模式 __declspec(dllexport) int WINAPI RUNMODE() {
//本DLL运行序列模式,如果运行逐K线模式将此函数返回1,此时每执行一个K线都是调用本接口一次。 //
return 1;
return 0; } void testparam(int i,int last_kx) { if(i== last_kx && test_param == true ) {
time_t rawtime;time ( &rawtime );
ofstream kd; kd.open("test_param.txt",ios::app); kd <<"test_param111:"<<test_param<<" "<<ctime(&rawtime); kd.close();
int f=2;
if(f)
{
test_param = false;
} ofstream kd1; kd1.open("test_param.txt",ios::app); kd1 <<"test_param222:"<<test_param<<" "<<ctime(&rawtime); kd1.close(); } } __declspec(dllexport) int WINAPI TESTTEST(CALCINFO* pData) {
if ( pData->m_pfParam1 &&
//参数1有效
pData->m_nParam1Start<0 &&
//参数1为常数
pData->m_pfParam2==NULL )
//仅有一个参数
{
float fParam = *pData->m_pfParam1;
int nPeriod = (int)fParam;
//参数1
if(nPeriod>0)
{
float fTotal;
int i, j;
for ( i = nPeriod-1; i < pData->m_nNumData; i++ )//计算nPeriod周期的均线,数据从nPeriod-1开始有效
{
testparam(i,pData->m_nNumData-1);
pData->m_pResultBuf[i] = i;
//平均
}
return nPeriod-1;
}
}
return -1; }//函数结束 以下为输出的结果 test_param111:1 Mon Sep 03 19:10:33 2012 test_param222:0 Mon Sep 03 19:10:33 2012 test_param111:1 Mon Sep 03 19:10:37 2012 test_param222:0 Mon Sep 03 19:10:37 2012 test_param111:1 Mon Sep 03 19:11:01 2012 test_param222:0 Mon Sep 03 19:11:01 2012 test_param111:1 Mon Sep 03 19:11:44 2012 test_param222:0 Mon Sep 03 19:11:44 2012 test_param111:1 Mon Sep 03 19:12:15 2012 test_param222:0 Mon Sep 03 19:12:15 2012 test_param111:1 Mon Sep 03 19:13:27 2012 test_param222:0 Mon Sep 03 19:13:27 2012 test_param111:1 Mon Sep 03 19:13:36 2012 test_param222:0 Mon Sep 03 19:13:36 2012 test_param111:1 Mon Sep 03 19:13:48 2012 test_param222:0 Mon Sep 03 19:13:48 2012 test_param111:1 Mon Sep 03 19:13:56 2012 test_param222:0 Mon Sep 03 19:13:56 2012 test_param111:1 Mon Sep 03 19:14:48 2012 test_param222:0 Mon Sep 03 19:14:48 2012 test_param111:1 Mon Sep 03 19:15:00 2012 test_param222:0 Mon Sep 03 19:15:00 2012 test_param111:1 Mon Sep 03 19:15:27 2012 test_param222:0 Mon Sep 03 19:15:27 2012 test_param111:1 Mon Sep 03 19:15:44 2012 test_param222:0 Mon Sep 03 19:15:44 2012 |
-- 作者:王锋 -- 发布时间:2012/9/3 20:21:08 -- 工具菜单->选项->常规 勾选"DLL公式加载驻留内存模式" |
-- 作者:oceanjztwind -- 发布时间:2012/9/3 21:16:19 -- 以下是引用王锋在2012-9-3 20:21:08的发言:
谢谢 我试试看
工具菜单->选项->常规 勾选"DLL公式加载驻留内存模式" |
-- 作者:oceanjztwind -- 发布时间:2012/9/4 18:35:35 -- 谢谢 这个OK了.... |