C中的多处理
Multiprocessing in C
我曾经看过一部电影叫"War Games"。我想在电影中模仿那个程序。我写了一个简单的程序,可以打印然后说出句子,反之亦然。我希望程序同时执行。我该怎么做?
#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <Windows.h>
#include <sapi.h>
ISpVoice *pVoice = NULL;
void printSmoothly(wchar_t *Str);
int main(void)
{
if (FAILED(::CoInitialize(NULL)))
return FALSE;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL,
IID_ISpVoice, (void **)&pVoice);
wchar_t *sentence = L"Greetings professor falken,What would you like to do ?";
// how can i execute these two at the same time ?
printSmoothly(sentence);
pVoice->Speak(sentence, 0, NULL);
pVoice->Release();
CoUninitialize();
return 0;
}
void printSmoothly(wchar_t *Str)
{
size_t len = wcslen( Str ) , n ;
for( n = 0 ; n < len ; n++ )
{
wprintf( L"%c", Str[n] );
Sleep(50);
}
}
您希望说话是异步的。
幸运的是,Speak
有一个标志,因此您还不需要深入研究多处理:
pVoice->Speak(sentence, SPF_ASYNC, NULL);
printSmoothly(sentence);
请注意,您需要先开始演讲,否则要等到打印完成后才能开始。
您还需要注意在演讲结束之前不要Release
和CoUninitialize
。
例如,如果您打印的速度比语音快,就会发生这种情况。
(异步编程在现实中比在好莱坞要难得多。)
我曾经看过一部电影叫"War Games"。我想在电影中模仿那个程序。我写了一个简单的程序,可以打印然后说出句子,反之亦然。我希望程序同时执行。我该怎么做?
#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <Windows.h>
#include <sapi.h>
ISpVoice *pVoice = NULL;
void printSmoothly(wchar_t *Str);
int main(void)
{
if (FAILED(::CoInitialize(NULL)))
return FALSE;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL,
IID_ISpVoice, (void **)&pVoice);
wchar_t *sentence = L"Greetings professor falken,What would you like to do ?";
// how can i execute these two at the same time ?
printSmoothly(sentence);
pVoice->Speak(sentence, 0, NULL);
pVoice->Release();
CoUninitialize();
return 0;
}
void printSmoothly(wchar_t *Str)
{
size_t len = wcslen( Str ) , n ;
for( n = 0 ; n < len ; n++ )
{
wprintf( L"%c", Str[n] );
Sleep(50);
}
}
您希望说话是异步的。
幸运的是,Speak
有一个标志,因此您还不需要深入研究多处理:
pVoice->Speak(sentence, SPF_ASYNC, NULL);
printSmoothly(sentence);
请注意,您需要先开始演讲,否则要等到打印完成后才能开始。
您还需要注意在演讲结束之前不要Release
和CoUninitialize
。
例如,如果您打印的速度比语音快,就会发生这种情况。
(异步编程在现实中比在好莱坞要难得多。)