前提・実現したいこと
VisualStudio2017にてC++でシリアル通信をしたいと思っています.
さらにできるだけ早く通信をしたいと思っています.
発生している問題
データの送信にwritefile関数を用いているのですが,writefile関数の処理時間をもっと高速にしたいと考えています.以下のソースコードのようにwritefile関数にかかる時間を測定したところ30~400[ms]ほどの時間がかかることが確認でき,一回当たりのループにかかる時間のほとんどを占めています.
このwritefile関数にかかる時間を少なくする方法を教えていただきたいです.
また,この関数以外にシリアル通信において送受信の時間がかからない関数等あれば教えていただけたら嬉しいです.
知識不足で大変申し訳ありませんが,ご教授お願い致します.
ソースコード
C++
#include "pch.h" #include <iostream> #include <stdio.h> #include <fstream> #include <chrono> #include <time.h> using namespace std; int main() { std::chrono::system_clock::time_point start, end; double elapsed = 0; int counter = 0; HANDLE hFile = ::CreateFile( "COM3" , GENERIC_WRITE , 0 , NULL , CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL ); while (1) { DWORD dwNumberOfWritten = 0; counter++; sprintf_s(str, "%d\n", counter); start = std::chrono::system_clock::now(); WriteFile(hFile, str.c_str(), str.size(), &dwNumberOfWritten, NULL) end = std::chrono::system_clock::now(); elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); cout << "elapsed" << elapsed << endl; } return 0; }
試したこと
送信時のタイムアウトの設定をいかに変更してみましたが,特に変化はありませんでした.
WriteTotalTimeoutMultiplier = 10;
WriteTotalTimeoutConstant = 10;
まだ回答がついていません
会員登録して回答してみよう