반응형

출처 : https://stackoverflow.com/questions/3125645/why-use-select-instead-of-sleep

왜 sleep() 대신에 select()를 사용하나요?

저는 iPhone 오디오에 대한 장을 살펴보고 있는데 이해할 수 없는 코드 섹션을 발견했습니다.

while (aqc.playPtr < aqc.sampleLen) 
{
    select(NULL, NULL, NULL, NULL, 1.0);
}

(전체 코드 샘플은 163-166페이지에 있습니다). 코드에 대해 내가 이해한 바에 따르면 오디오가 다른 스레드에서 처리되고 있고 while 루프는 오디오가 여전히 처리되는 동안 메인 스레드가 종료되는 것을 방지하기 위한 것입니다.

제가 이해할 수 없는 것은 왜 select()sleep() 대신에 사용되었는지 입니다.

내가 읽은 것에서 select()는 I/O의 변경 사항을 모니터링하는 데 사용되며 NULL을 전달해도 의미가 없습니다. sleep()을 사용하여 코드를 실행했으며 예상대로 작동합니다. (저수준 POSIX에 대한 나의 지식은 거의 존재하지 않습니다.)


6개의 답변 중 1 개의 답변

정확한 1초 미만 대기 허용을 선택하고 sleep 보다 이식성이 좋습니다. 대기하는 다른 방법이 있는데 이 질문을 참조하십시오.

그러나 select의 timeout 매개변수는 float가 아니라 struct timeval에 대한 포인터여야 합니다. 나는 당신이 보여주는 코드가 심지어 컴파일된다는 것에 놀랐습니다. More : 이 이상한 조건부 선택 다음에 무조건적인 sleep(1)이 뒤따릅니다. 무의미해 보입니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/18924792/sort-and-remove-duplicates-from-int-array-in-c

C의 int 배열을 정렬하고 중복 제거하기

저는 C를 배우고 있고 정렬 부분가지 왔습니다. 저는 comp() 함수를 작성하고 int 의 배열로 정렬하는 데 qsort를 사용하였습니다. 이제 다음에 할 일은 배열로부터 중복을 제거하는 것입니다. 한 번에 정렬과 중복제거가 가능합니까?

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>    
int indexes[10] = { 0, 98, 45, 65, 45, 98, 78, 56, 65, 45 };

int comp(const void * elem1, const void * elem2) {

    int f = *((int*) elem1);
    int s = *((int*) elem2);

    if (f > s) {    
        return 1;
    }    
    if (f < s) {    
        return -1;
    }    
    return 0;
}

void printIndexArray() {    
    int i = 0;    
    for (i = 0; i < 10; i++) {    
        printf("i is %d\n", indexes[i]);    
    }
}

int main() {    
    qsort(indexes, sizeof(indexes) / sizeof(int), sizeof(int), comp);    
    printIndexArray();    
    return 0;
}

5 개의 답변 중 1 개의 답변

당신이 만든 숫자가 이미 정렬되었기 때문에 중복을 제거하는 것은 쉽습니다. C++에서는 std::unique로 만들어져 있습니다.

http://en.cppreference.com/w/cpp/algorithm/unique

당신 스스로 하고 싶기를 원하시면 unique가 하는 것과 똑같이 당신도 다음처럼 하실 수 있습니다.

int* unique (int* first, int* last)
{
  if (first==last) return last;

  int* result = first;
  while (++first != last)
  {
    if (!(*result == *first)) 
      *(++result)=*first;
  }
  return ++result;
}
반응형
반응형

출처 : http://stackoverflow.com/questions/3437404/min-and-max-in-c

C언어에서 MIN과 MAX

C에서 정의된 MINMAX가 어디에 있습니까?

가능한 일반적이고 안전하게 이를 구현하는 최고의 방법은 무엇입니까? (주요 컴파일러에서 사용하는 컴파일러 확장/빌트인을 선호합니다.)


15 개의 답변 중 1 개의 답변

C에서 정의된 MINMAX 가 어디에 있습니까?

없습니다.

가능한 일반적이고 안전하게 이를 구현하는 최고의 방법은 무엇입니까? (주요 컴파일러에서 사용하는 컴파일러 확장/빌트인을 선호합니다.)

함수로써 저는 #define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))같은 매크로를 사용하지 않을 것입니다. 특별히, 당신의 코드에 배포할 계획이 있다면요. GCC 구문 표현에서 당신 스스로 표준인 fmax또는 fmin같은 것을 사용하거나 GCC의 typeof를 사용한 매크로를 고칠것입니다. (타입에 안전함도 보너스로 얻을 것입니다.)

#define max(a,b) \
   ({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a : _b; })

모두가 "아, 이중 평가에 대해 알고 있습니다. 문제가 없습니다."라고 말하고 몇 달 후에는 몇 시간 동안 가장 어리석은 문제를 디버깅하게 될 것입니다.

typeof 대신에 __typeof__를 사용하세요.

만약 ISO C 프로그램에서 include될 때 당신이 헤더파일을 작성한다면 typeof 대신에 __typeof__를 써야 작동될 것입니다.

반응형

+ Recent posts