私はCWinThread
を使用しています。そして、私はメインのGUIにLPARAM
の配列をスレッドに送りました。例、このコードワークス:スレッド上メッセージと共にスレッドに変数をポストするMFCを使用
//On GUI
char *headData = "L1";
PostThreadMessage(threadID,SEND_HEAD, 0, (LPARAM)head);
:
void CMyThread::OnSendhead(WPARAM, LPARAM lParam){
char *head = (char*)lParam;
if (strcmp(head,"L1")==0){
//This line is reached.
}
return;
}
しかし、私はここで少し変更しますとき:スレッド上
char *head = "L1"
unsigned char byteHead[3];
memcpy(byteHead, head, 3);
PostThreadMessage(threadID,SEND_HEAD, 0, (LPARAM)byteHead);
:
をvoid CMyThread::OnSendhead(WPARAM, LPARAM lParam){
unsigned char* byteHead = (unsigned char*)lParam;
char head[3];
memcpy(head, byteHead,3);
head[3] = '\0';
if (strcmp(head,"L1")==0){
//This line is nerver reached.
}
return;
}
if
の中のラインは届きません。私は、(LPARAMにキャストせずに)テストのためのGUIにスレッド上のコードを移動し、何事もうまくいきます。だから私はlParam
とunsigned char*
の間にキャストできないと思いますか?なぜ、私はこれをどうやって行うのですか?ありがとうございました
をだから、私はにメッセージを送りたいので、私は、messegeがどこに送られるのかを知るためにthreadIDを持っていなければならないので、 'SendMessage'を使用する方法はありません。しかし、変数のために、私はスレッドのGUIのメンバーに触れることは良い練習ではないということについてどこか読んでいますか? –
@TrungNguyenマルチスレッドWindowsプログラムの経験はありませんが、これは地雷が埋まっている領域であり、私はこれまでこれを避けてきました。私は本当にあなたが答えにあるものを超えて信頼できる助言を与えることはできません。 –
ありがとうございます、あなたの答えは正しいです、変数は、スレッドがメッセージをピックアップする前にスクープから外れています。私はmemcpyを使って別の変数に値を格納しています。 –