私はオープンソースのカーシュミレーションゲームにおいても研究を行っています。
C++において一定の時間おきに処理を行いたいと考えています。
そこでスリープ関数を用いて、指定の時間を止め、処理を行っているのですが
画面がカクカクしてしまい、見づらいです。
そこで一定の時間おきに処理を行う方法を考えていた際に、settimer関数に辿り着きました。
以下の処理を行いたい際にどのように組み込めば良いと考えられますか?
使用環境はwindows8.1/visual studio2017です。
該当のソースコード
C++
1 2 char buff[256]; 3 _ApplicationPtr pXL; 4 HRESULT hr = pXL.CreateInstance(L"Excel.Application"); 5 pXL->Visible[0] = TRUE; //ウィンドウを表示 6 WorkbooksPtr pBooks = pXL->Workbooks; 7 _WorkbookPtr pBook = pBooks->Open(""); //マクロを含むブックを開く 8 variant_t macro = (_bstr_t)"abc.xlsm!csv"; //実行マクロ名 9 pXL->Run(macro); 10 pBook->Close("); //マクロを含むブックを閉じる 11 pBook.Release(); // COMオブジェクトを解放 12 pBooks.Release(); // COMオブジェクトを解放 13 pXL->Quit(); 14 pXL.Release(); // COMオブジェクトを解放 15
C++コードを提示されていますが、実際のシミュレーション処理はExcelマクロ側で行っているのでしょうか?そうであればC++コードは全く関係がなく、Excelマクロ側で対処すべき問題のように見受けられます。
回答ありがとうございます。
C++上でvbaを起動させ、マクロを実行しています。
その際にマクロの実行間隔が短すぎた(約0.011秒)ため、実行間隔を長くしたいのですが
そのためにはC++上でのコードの変更が必要であると考えています。
宜しくお願い致します。
元々のカーシュミレータはC++で構成されています。
そこに自分で作ったvbaマクロを組み込んでいるという状態です。
「画面がカクカクしてしまい見づらい」=画面更新が滑らかでない?一定間隔でない?意図しているより高速/低速に画面更新されてしまう?
説明不足で申し訳ございません。
マクロの実行間隔を長くするために、vbaを起動させる前にsleep関数で処理を一時停止させています。
このことによりマクロの実行間隔は長くなったのですが、処理を毎回停止させているので、カーシュミレータがカクカクしてしまっています。
そのためsettimer関数などを用いて、処理を毎回停止させることなく実行間隔を長くしたいと考えています。
これ以上は状況理解できないので手伝えそうにありませんが、タイマー処理とSleep処理に本質的な違いはありません。どちらも一定期間プログラムの進行を停止するだけです。真に解決すべき問題を探ったほうがよさそうに思えます。
回答ありがとうございます。
タイマー処理も一定期間処理を停止するだけなのですね...
コード全体の処理を停止させることなく、一定時間おきに一部の処理を行うことなどは不可能なのでしょうか??
所感ですが、まずはユーザ観点の「画面がカクカクしてしまい見づらい」事象の原因解析=あなた自身が何が起きているのかをプログラム動作の観点で説明できるようになる所からでしょうか。
回答4件
あなたの回答
tips
プレビュー