TCP サーバーを使用して char 配列を送信しています。この関数send()
は を受け取りますがchar *
、その前に、接続をリッスンして受け入れる必要があります。そのため、着信接続が受け入れられたときに最新のデータを送信したいと考えています。以前は、2 つのスレッドを使用していました。1 つはバッファ内の値を更新し、もう 1 つは単に接続を待ってからデータを送信しました。
ミューテックスをロックしないと問題が発生する可能性があることは理解していますが、それとは別に、をchar *
グローバル変数として更新するのではなく、送信関数に渡した場合、この同じスキームは機能しますか?
デモ用のコード:
#include <pthread.h>
char buf[BUFLEN];
void *updateBuffer(void *arg) {
while(true) {
getNewData(buf);
}
}
void *sendData(void *arg) {
//Setup socket
while(true) {
newfd = accept(sockfd, (struct sockaddr *)&their_addr, &size);
send(newfd, buf, BUFLEN, 0);
close(newfd);
}
}
これにより、新しい接続が確立されるたびに更新された値が送信されます。
これを試してみたい:
#include <pthread.h>
char buf[BUFLEN];
void *updateBuffer(void *arg) {
while(true) {
getNewData(buf);
}
}
void *sendData(void *arg) {
TCPServer tcpServer;
while(true) {
tcpServer.send(buf);
}
}
機能tcpServer.send(char *)
は基本的に上記と同じsendData()
です。
これを行う理由は、TCP サーバーをクラスにできるようにするためです。別の場所で同じコードを使用する必要があるからです。
私の理解では、ポインターを渡しているので、send()
そこにもポインターを渡すので、基本的に を呼び出すだけの場合と同じです。値は引き続き更新されますが、アドレスは変更されないため、機能するはずです。それが正しいかどうか教えてください。私はこれを行う新しい方法にもオープンです(できればミューテックスロックなしで)。