C多线程编程简单实例.docxVIP

  • 5
  • 0
  • 约4.43千字
  • 约 5页
  • 2017-11-20 发布于北京
  • 举报
C多线程编程简单实例

C++多线程编程简单实例 ?(2012-05-18 16:26:01)  HYPERLINK javascript:; 转载▼ 标签:?  HYPERLINK /?c=blogq=itby=tag \t _blank itC++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: ? 创建线程的函数 HANDLE CreateThread(? ????LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD ????SIZE_T dwStackSize, ??????????????????????// initial stack size ????LPTHREAD_START_ROUTINE lpStartAddress, ???// thread function ????LPVOID lpParameter, ??????????????????????// thread argument ????DWORD dwCreationFlags, ???????????????????// creation option ????LPDWORD lpThreadId ???????????????????????// thread identifier ); 在这里我们只用到了第三个和第四个参数,第三个参数传递了一个函数的地址,也是我们要指定的新的线程,第四个参数是传给新线程的参数指针。 eg1: ? #include iostream #include windows.h using namespace std; ? DWORD WINAPI Fun(LPVOID lpParamter) { ??????while(1) { coutFun display!endl; } } ? int main() { ????HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL); ????CloseHandle(hThread); ????while(1) { coutmain display!endl; ?} ????return 0; } ? 我们可以看到主线程(main函数)和我们自己的线程(Fun函数)是随机地交替执行的,但是两个线程输出太快,使我们很难看清楚,我们可以使用函数 VOID Sleep( ????DWORD dwMilliseconds ??// sleep time ); 来暂停线程的执行,dwMilliseconds表示千分之一秒,所以 Sleep(1000); 表示暂停1秒 ? eg2: ?? #include iostream #include windows.h using namespace std; ? DWORD WINAPI Fun(LPVOID lpParamter) {???? ??????while(1) { coutFun display!endl; Sleep(1000);} } ? int main() { ??????HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL); ??????CloseHandle(hThread); ??????while(1) { coutmain display!endl; ?Sleep(2000);} ??????return 0; } 执行上述代码,这次我们可以清楚地看到在屏幕???交错地输出Fun display!和main display!,我们发现这两个函数确实是并发运行的,细心的读者可能会发现我们的程序是每当Fun函数和main函数输出内容后就会输出换行,但是我们看到的确是有的时候程序输出换行了,有的时候确没有输出换行,甚至有的时候是输出两个换行。这是怎么回事?下面我们把程序改一下看看: eg3: ?? #include iostream #include windows.h using namespace std; ? DWORD WINAPI Fun(LPVOID lpParamter) { ??????while(1) { coutFun display!\n; Sleep(1000);} } ? int main() { ??????HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL); ??????CloseHandle(hThread); ??????while(1) { coutmain disp

文档评论(0)

1亿VIP精品文档

相关文档