다중 스레드 데이터에 액세스하고 수정하는 데 문제가 있습니다. 이 작업을 수행 할 수있는 적절한 방법이 있습니까?C++의 스레드 데이터 액세스 및 수정
여기 내 전체 코드입니다 :
#include <stdio.h>
#include <windows.h>
// Create thread data structure
struct data
{
int a;
float b;
char *c;
};
DWORD WINAPI threadfn(LPVOID lpParam)
{
printf("Address of thread data:\n");
for(int i=0; i<sizeof(lpParam); i++)
printf("%X\n", (int*)lpParam + i);
// Print out initial values
printf("\nInitial values:\n");
printf("a: %d\n", *((int*)lpParam));
printf("b: %.2f\n", *((float*)lpParam + 1));
printf("c: %s\n", *((int*)lpParam + 2));
// Modify thread data values
*(int*)lpParam = 200;
*((float*)lpParam + 1) = 25.80;
*((char*)lpParam + 2) = "Es la una";
return 0;
}
int main()
{
HANDLE hThread;
data thread;
// Set initial thread data values
thread.a = 10; // Integer data type
thread.b = 15.60; // Float data type
thread.c = "Que hora es?"; // String data type
hThread = CreateThread(NULL, 0, threadfn, &thread, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
// Print out thread value after modification
printf("\nAfter thread modifications:\n");
printf("a: %d\n", thread.a);
printf("b: %.2f\n", thread.b);
printf("c: %s\n", thread.c);
getchar();
return 0;
}
그리고 이것은 내 출력됩니다 : 당신이 볼 수 있듯이
Address of thread data:
28FF20
28FF24
28FF28
28FF2C
Initial values:
a: 10
b: 15.60
c: Que hora es?
After thread modifications:
a: 7405768
b: 25.80
c: Que hora es?
에서, 'C'값이 동일합니다. 문자열 값을 어떻게 수정합니까?
사이드 댓글. 잘못 계산하기 쉬운 포인터 연산을 수동으로 처리하는 대신에'threadfn'의 알려진 타입으로 매개 변수를 캐스팅해야합니다 :'data * param = static_cast (lpParam); /*...*/ param-> a = 200; param-> b = 25.80; ' –