모두로 구성되어 있습니다 ... 저는 방금 Windows API를 사용하여 프로세스와 스레드를 만드는 방법을 배우기 시작했습니다. 스레드가 화면에 정수를 표시하도록하려면 코드가 작동하지만 char 배열을 사용할 때는 작동하지 않습니다. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? 코드 :CreatThread API를 사용하여 스레드를 생성 한 후 콘솔의 출력은 물음표
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
#include<tchar.h>
#include<strsafe.h>
#include<string.h>
#define N 4
#define bufferSize 255
DWORD WINAPI Threader(LPVOID Parameter);
typedef struct Data {
char value[bufferSize];
} Data, *pToData;
int main()
{
int i;
char c[bufferSize];
pToData threadData[N];
HANDLE handleArray[N];
DWORD threadID[N];
FILE *file=fopen("niti.txt", "r");
for(i=0; i<N; i++)
{
fscanf(file, "%s", c);
threadData[i] = (pToData) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Data));
strcpy(threadData[i]->value, c);
handleArray[i]=CreateThread(NULL, 0, Threader, threadData[i], 0, &threadID[i]);
}
WaitForMultipleObjects(N, handleArray, TRUE, INFINITE);
for(i=0; i<N; i++)
{
CloseHandle(handleArray[i]);
if(threadData[i] != NULL)
{
HeapFree(GetProcessHeap(), 0, threadData[i]);
threadData[i] = NULL;
}
}
fclose(file);
return 0;
}
DWORD WINAPI Threader(LPVOID Parameter)
{
HANDLE hStdOut;
TCHAR messageBuffer[bufferSize];
size_t cchStringSize;
DWORD dwChars;
pToData dataArray;
char temp[bufferSize];
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdOut == INVALID_HANDLE_VALUE)
return 1;
dataArray=(pToData)Parameter;
StringCchPrintf(messageBuffer, bufferSize, TEXT("Parameter = %s\n"), dataArray->value);
StringCchLength(messageBuffer, bufferSize, &cchStringSize);
WriteConsole(hStdOut, messageBuffer, (DWORD)cchStringSize, &dwChars, NULL);
return 0;
}
내가 주요 출력에 같은 INT 내 구조체에 값을 변경 할 경우 올바른 것입니다. 어떤 제안? 감사합니다.
감사합니다 ... __wchar_t__는 매력처럼 작동했습니다! 또한 __strcpy() __를 __wcscpy()로 변경해야했습니다 __ 다시 한 번 감사드립니다! – zkristic
'TCHAR'과 일치시키기 위해'_tcscpy'를 사용할 수 있습니다.하지만 훨씬 더 나아 가기 전에 텍스트 인코딩을해야 할 필요가 있다고 생각합니다. 그것은 조금 두려워하지 않는 mish-mash 오른쪽입니다. –
나는 정말로 텍스트 인코딩 맨 위에 있어야한다 ...이 것은 어제부터 나를 괴롭 히고 있었다! 제목 (인코딩 및 C/C++의 사용법)과 관련하여 볼 가치가있는 페이지에 대한 링크가 있습니까? 친애하는! – zkristic