2013-12-13 4 views
6

char을 인수로 취하는 함수를 실행할 스레드를 생성하기 위해 beginthreadex를 사용하려고합니다. C++에서 나쁘다. char를 const char로 변환하는 방법을 알아낼 수 없다. , beginthreadex는 인수를 필요로한다. 그렇게 할 수있는 방법이 있습니까? 나는 char을 const char으로 변환하는데 많은 질문을하지만 const char *는 찾지 못한다.C++ char을 const char *로 변환 *

+0

'char *'을'const char *'로 암시 적으로 변환 할 수 있습니다. 아무 것도 할 필요가 없습니다. – asveikau

+0

@asveikau : 포인터를 원한다면 char 값을 전달하는 데 도움이되지 않습니다. –

+0

문서 (http://msdn.microsoft.com/en-us/library/kdzttdcb.aspx)에 따르면'beginthreadex'는'void * '를 원합니다. – dalle

답변

9
char a = 'z'; 
const char *b = &a; 

물론 이것은 스택에 있습니다. 힙에 필요할 경우

char a = 'z'; 
const char *b = new char(a); 
+0

질문은 C++에 관한 것이므로,'new'로 대신 할 수 있습니다. – filmor

+0

@filmor, 당신 말이 맞아요. 끝난. –

0

함수가 종료 문자에 대한 const 포인터를 예상하는 경우 Paul Draper의 응답과 함께 이동해야합니다. 그러나 이것은 null로 끝나는 문자열에 대한 포인터가 아니라 함수가 기대할 수있는 것임을 명심하십시오. 당신이 종료 문자열을 null로 포인터를해야 할 경우 당신은 당신이 당신이 원하는 것을 정확히 알고 열심히 코드를 표시하지 않았기 때문에 std::string::c_str

f(const char* s); 

char a = 'z'; 
std::string str{a}; 
f(str.c_str()); 
0

를 사용하지만, 여기에 문자로 기대 함수를 호출하는 방법입니다 수 있습니다 thread 내의 인수 인수 자체를 변환하는 함수를 변경할 수 없다면 중간에 앉아서 실제 함수를 호출하는 트램 폴린 함수가 필요합니다.

#include <Windows.h> 
#include <process.h> 
#include <iostream> 

void ActualThreadFunc(char c) 
{ 
    std::cout << "ActualThreadFunc got " << c << " as an argument\n"; 
} 

unsigned int __stdcall TrampolineFunc(void* args) 
{ 
    char c = *reinterpret_cast<char*>(args); 
    std::cout << "Calling ActualThreadFunc(" << c << ")\n"; 
    ActualThreadFunc(c); 
    _endthreadex(0); 
    return 0; 
} 

int main() 
{ 
    char c = '?'; 
    unsigned int threadID = 0; 
    std::cout << "Creating Suspended Thread...\n"; 
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &TrampolineFunc, &c, CREATE_SUSPENDED, &threadID); 
    std::cout << "Starting Thread and Waiting...\n"; 
    ResumeThread(hThread); 
    WaitForSingleObject(hThread, INFINITE); 
    CloseHandle(hThread); 
    std::cout << "Thread Exited...\n"; 

    return 0; 
} 
관련 문제