쓰레드로 만들 함수에 인수를 두 개 이상 줄 수 있는 방법이 있

wizmusa의 이미지

어떤 소스 코드를 받고 고쳐쓰고 있습니다. 그런데 다음과 같이 쓰레드를 만들어 쓰는데요.

if(pthread_create(&thread_id, NULL, (void *)doDownLoad, (void *)&threadFd)) 
{
	printf("dlServer startServer(), FAIL_CREATE_THREAD, errno = %d \n", errno);
}

일단 (void *)&threadFd라는 인수를 주는 것은 알겠습니다. 제가 알고 싶은 것은
1) 원래 저렇게 (void *)를 붙여서 주소로 넘겨줘야만 하는 지 여부하구요,
2) (void *)doDownLoad에서 왜 (void *)를 앞에다 붙이는 지...
3) doDownLoad에 인수를 두 개 이상 전달하고 싶으면 어떻게 해야하는지 입니다.

검색을 이래저래 해봤는데 찾을 수가 없어서 이렇게 게시물을 올립니다. 답변 부탁드려요~~~ :)

sunyzero의 이미지

wizmusa wrote:

[1) 원래 저렇게 (void *)를 붙여서 주소로 넘겨줘야만 하는 지 여부하구요,
2) (void *)doDownLoad에서 왜 (void *)를 앞에다 붙이는 지...
3) doDownLoad에 인수를 두 개 이상 전달하고 싶으면 어떻게 해야하는지 입니다.

1) void *인것은 어떤 데이터타입이 들어올지 모르니까 void *로 주고, 나중에 캐스팅해서 쓰게 하기 위함입니다.
2) 위와 같은 질문입니다.
3) 인수는 두개 전달 할 수 없습니다. 보통 구조체를 선언해서 그 안에 여러개의 데이터를 넣어주고, 캐스팅해서 쓰기 때문에 한개의 인수만 있어도 충분합니다.

========================================
* The truth will set you free.

익명 사용자의 이미지

wizmusa wrote:
어떤 소스 코드를 받고 고쳐쓰고 있습니다. 그런데 다음과 같이 쓰레드를 만들어 쓰는데요.

if(pthread_create(&thread_id, NULL, (void *)doDownLoad, (void *)&threadFd)) 
{
	printf("dlServer startServer(), FAIL_CREATE_THREAD, errno = %d \n", errno);
}

일단 (void *)&threadFd라는 인수를 주는 것은 알겠습니다. 제가 알고 싶은 것은
1) 원래 저렇게 (void *)를 붙여서 주소로 넘겨줘야만 하는 지 여부하구요,
2) (void *)doDownLoad에서 왜 (void *)를 앞에다 붙이는 지...
3) doDownLoad에 인수를 두 개 이상 전달하고 싶으면 어떻게 해야하는지 입니다.

검색을 이래저래 해봤는데 찾을 수가 없어서 이렇게 게시물을 올립니다. 답변 부탁드려요~~~ :)


1) void *는 타입이 정해지지 않은 포인터란 뜻입니다. 목적은 캐스트없이 아무 포인터나 다 받을 수 있도록 하기 위한 것이죠. 거기다 캐스트를 하면 void *의 존재 목적이 없어집니다. 8)
2) 1번답 참조
3) 구조체를 선언한 다음 그안에 변수를 여러 개 넣으면 됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.