beginthreadexについて
Posted: 2011年10月27日(木) 11:06
以下のプログラム(juliusのsimpleのmain文)ですが、そこのmain関数の中にあるものをbeginthreadexを用いてスレッド化し、mainではそのスレッドを呼び出せば使えるようにしたいのですが、beginthreadexを使ったことがなく、様々なサイトを見ていますが、いまいち理解できません。このプログラムでbeginthreadexを用いてスレッド化する、やり方、ポイントなど教えていただけたらと思います。最終的には、このスレッドと別のプログラムを一緒に動かします。
また、beginthreadexを理解するために分かりやすいサイト等ございましたら教えていただきたいです。
また、beginthreadexを理解するために分かりやすいサイト等ございましたら教えていただきたいです。
int main(int argc, char *argv[])
{
Jconf *jconf;
Recog *recog;
static char speechfilename[MAXPATHLEN];
int ret;
if (argc == 1) {
fprintf(stderr, "Julius rev.%s - based on ", JULIUS_VERSION);
j_put_version(stderr);
fprintf(stderr, "Try '-setting' for built-in engine configuration.\n");
fprintf(stderr, "Try '-help' for run time options.\n");
return -1;
}
jconf = j_config_load_args_new(argc, argv);
if (jconf == NULL) { /* error */
fprintf(stderr, "Try `-help' for more information.\n");
return -1;
}
recog = j_create_instance_from_jconf(jconf);
if (recog == NULL) {
fprintf(stderr, "Error in startup\n");
return -1;
}
callback_add(recog, CALLBACK_EVENT_SPEECH_READY, status_recready, NULL);
callback_add(recog, CALLBACK_EVENT_SPEECH_START, status_recstart, NULL);
callback_add(recog, CALLBACK_RESULT, output_result, NULL);
if (j_adin_init(recog) == FALSE) { /* error */
return -1;
}
j_recog_info(recog);
if (jconf->input.speech_input == SP_MFCFILE) {
/* MFCC file input */
while (get_line_from_stdin(speechfilename, MAXPATHLEN, "enter MFCC filename->") != NULL) {
if (verbose_flag) printf("\ninput MFCC file: %s\n", speechfilename);
/* open the input file */
ret = j_open_stream(recog, speechfilename);
switch(ret) {
case 0: /* succeeded */
break;
case -1: /* error */
/* go on to the next input */
continue;
case -2: /* end of recognition */
return;
}
/* recognition loop */
ret = j_recognize_stream(recog);
if (ret == -1) return -1; /* error */
/* reach here when an input ends */
}
} else {
/* raw speech input (microphone etc.) */
switch(j_open_stream(recog, NULL)) {
case 0: /* succeeded */
break;
case -1: /* error */
fprintf(stderr, "error in input stream\n");
return;
case -2: /* end of recognition process */
fprintf(stderr, "failed to begin input stream\n");
return;
}
ret = j_recognize_stream(recog);
if (ret == -1) return -1; /* error */
}
j_close_stream(recog);
j_recog_free(recog);
return(0);
}