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