MinGWのスレッドクラスサポートが不足しているため、私はboost asyncを使用しています。C++の不思議な非同期動作
このため、パケットを5秒ごとに送信し、boost::async
(std::async
)を使用することにしました。
これは私がパケットを送信するために使用する機能です(これは実際にバッファにコピーし、メインアプリケーションループに送信している - NVM! - それは罰金外の非同期メソッドを働いている)
m_sendBuf = new char[1024]; // allocate buffer
[..]
bool CNetwork::Send(const void* sourceBuffer, size_t size) {
size_t bufDif = m_sendBufSize - m_sendInBufPos;
if (size > bufDif) {
return false;
}
memcpy(m_sendBuf + m_sendInBufPos, sourceBuffer, size);
m_sendInBufPos += size;
return true;
}
コードを送信パケット:
struct TestPacket {
unsigned char type;
int code;
};
void SendPacket() {
TestPacket myPacket{};
myPacket.type = 10;
myPacket.code = 1234;
Send(&TestPacket, sizeof(myPacket));
}
非同期コード:
void StartPacketSending() {
SendPacket();
std::this_thread::sleep_for(std::chrono::seconds{5});
StartPacketSending(); // Recursive endless call
}
boost::async(boost::launch::async, &StartPacketSending);
よし。ですから、私はSendPacket()
を非同期メソッドから呼び出すと、受信したパケットがサーバー側で不正な形式であり、データが指定されたものと異なっています。これは、非同期呼び出しの外で呼び出されたときには発生しません。
ここでは何が起こっていますか?私はアイデアがありません。
"MinGWでスレッドのクラスサポートが不足しているためです。"あなたのMinGWのコピーはかなり古いものでなければなりません。コマンドラインに-std = C++ 0xまたは-std = C++ 11を追加しようとしましたか? – user4581301
'再帰的な無限呼び出し'なぜ再帰?あなたは最終的に自動ストレージを使い果たします。 – user4581301
@ user4581301私はそれが永遠に走りたいので。私はそれが無限ループを持つよりも良いと思う。 – Kesse