madplay에 sdl 사용했어요. visual 하게 할려구요...
우선은요....
make;make install 하면됩니다.
root 디렉토리에 gulim.ttf,H2PORL.TTF 폰트파일이 있어야 하고 없으면 다른 폰트파일을
main()에서 지정하시면 될것 같습니다.
당근이 aesop 기본 환경에서 해야 합니다.
scratchbox를 사용한 native compile이 아니고 cross compile 입니다.
삼바접속하셔서 root에 간단히 압축푸신다음 사용하시면 될것 같습니다.
scratchbox 의 AESOP rootfilesystem으로 인스톨 될거구요.
프롬프트 나오면 아래 1 번, 2번 각각 실행해보시면 되네요...
1. player.c -> event_loop() sdl_status() 쓰레드 사용하기.
처음에 압축을 풀어서
root@godori:~#make;make install 해서
root@godori:~#madplay *.mp3
하시면 sdl_status()쓰레드가 sdl_status_out(),sdl_time_progress() 두 함수를 사용하여
lcd로 간단한 출력합니다.
event_loop() 쓰레드는 키버튼 이벤트를 받습니다.
문제는 버튼을 눌렀을 때 에러가 납니다. 쓰레드를 잘 못 쓴거 같은데 잘 모르겠습니다.
event_loop()에 player 구조체 문제가 있는거 같은데... 잘 모르겠습니다.
mutex 써야 하나...
2. sdl_status() 쓰레드 사용하지 않기
player.c 파일의 play_all() 에서 //SDL_CreateThread(sdl_status,NUll); 합니다.
-v 하면 show_status()에서 sdl_status_out(),sdl_time_progress()를 사용하기 때문에
sdl_status()쓰레드 생성 라인에 주석을 답니다.
root@godori:~#make;make install 하고
root@godori:~# maplay *.mp3 -v 하면 버튼도 잘 먹고 화면도 잘 나옵니다.
event_loop() 하고 status를 쓰레드를 만들어서 사용하고 싶은데
어떻게 하는것이 좋을까요?
쓰레드를 거의 처음 사용해보는데요.. 어렵네요...
결론은 sdl_status()쓰레드를 사용하지 않으면 잘 되네요....
쓰레드 사용하고 싶은데....
SDL thread는 일반 pthread랑 사용법이 같습니다.
해서 windows나 다른 thread루틴보다는 어렵습니다.
소스를 봤는데, 제가 보던 스타일이 아니라서 한참 분석해야
하더군요.
보통 소스 큰 것은 다른 사람이 보기가 힘듭니다. 일일이 설명해
줘도 말이죠...
thread는 생성만 하면 됩니다만
SDL thread에서 event thread와 일반적인 일을 하는 process용
thread와 주고 받는 방법 중 간단하게 제가 쓰는 방법은 다음과
같습니다.
1. event thread는 하나만 생성한다
즉, 모든 이벤트는 event thread에서만 다뤄야 합니다.
2. process용 thread로 데이터를 보내는 것은 그냥 함수를 호출하거나
global 변수 + condition variable을 사용한다.
3. process용 thread에서 event발생시는 event structure에
그냥 event와 data를 넣어서 event thread에서 읽어가도록 한다.
저는 이렇게 사용합니다.
지금까지 큰 문제는 없었습니다.