﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-sunrise-随笔分类-C/C++学习</title><link>http://www.cppblog.com/sunrise/category/18836.html</link><description>每天不断学习，才能不断提升自己。

欢迎交流 QQ：703979707

我的铺子：http://www.u148.net/u/lwx</description><language>zh-cn</language><lastBuildDate>Wed, 08 Aug 2012 17:27:58 GMT</lastBuildDate><pubDate>Wed, 08 Aug 2012 17:27:58 GMT</pubDate><ttl>60</ttl><item><title>多线程之数据同步</title><link>http://www.cppblog.com/sunrise/archive/2012/08/08/186657.html</link><dc:creator>SunRise_at</dc:creator><author>SunRise_at</author><pubDate>Wed, 08 Aug 2012 07:34:00 GMT</pubDate><guid>http://www.cppblog.com/sunrise/archive/2012/08/08/186657.html</guid><wfw:comment>http://www.cppblog.com/sunrise/comments/186657.html</wfw:comment><comments>http://www.cppblog.com/sunrise/archive/2012/08/08/186657.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/sunrise/comments/commentRss/186657.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunrise/services/trackbacks/186657.html</trackback:ping><description><![CDATA[<p><span style="font-family: Arial; ">&nbsp;&nbsp; 想了解一下多线程就上网查资料，发现有现成的函数可以直接创建线程。即：</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000; font-family: Arial; ">　uintptr_t&nbsp;_beginthread(&nbsp;　　</span><span style="color: #0000ff; font-family: Arial; ">void</span><span style="color: #000000; font-family: Arial; ">(&nbsp;</span><span style="color: #000000; font-family: Arial; ">*</span><span style="color: #000000; font-family: Arial; ">start_address&nbsp;)(&nbsp;</span><span style="color: #0000ff; font-family: Arial; ">void</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-family: Arial; ">*</span><span style="color: #000000; font-family: Arial; ">&nbsp;),&nbsp;　　unsigned&nbsp;stack_size,&nbsp;　　</span><span style="color: #0000ff; font-family: Arial; ">void</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-family: Arial; ">*</span><span style="color: #000000; font-family: Arial; ">arglist&nbsp;　　);&nbsp;</span></div>
<p><span style="font-family: Arial; ">&nbsp;&nbsp;&nbsp;&nbsp; 返回值： </span></p>
<div class="spctrl"></div>
<p><span style="font-family: Arial; ">　　假如成功，函数将返回一个处理信息对这个新创建的线程。如果失败_beginthread将返回-1。 </span></p>
<div class="spctrl"></div>
<p>　　<em style="font-family: Arial; ">start_address</em> </p>
<div class="spctrl"></div>
<p><span style="font-family: Arial; ">　　新线程的起始地址 ，指向新线程调用的函数的起始地址 </span></p>
<div class="spctrl"></div>
<p>　　<em style="font-family: Arial; ">stack_size</em> </p>
<div class="spctrl"></div>
<p><span style="font-family: Arial; ">　　新线程的堆栈大小，可以为0 </span></p>
<div class="spctrl"></div>
<p>　　<em style="font-family: Arial; ">arglist</em> </p>
<div class="spctrl"></div>
<p><span style="font-family: Arial; ">　　传递给线程的参数列表，无参数是为NULL </span></p>
<div class="spctrl"></div>
<p><span style="font-family: Arial; ">　　所在库文件： </span></p>
<div class="spctrl"></div>
<p><span style="font-family: Arial; ">　　#include &lt;</span><a href="http://baike.baidu.com/view/3795550.htm" target="_blank"><span style="font-family: Arial; ">process.h</span></a><span style="font-family: Arial; ">&gt;&nbsp;</span><br />&nbsp; <br /><span style="font-family: Arial; ">下面是一个创建多线程数据同步的一个实例：</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">windows.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">process.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">stdio.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;print(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">argv)<br /><img id="Codehighlighter1_107_204_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_204_Open_Text.style.display='none'; Codehighlighter1_107_204_Closed_Image.style.display='inline'; Codehighlighter1_107_204_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_107_204_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_107_204_Closed_Text.style.display='none'; Codehighlighter1_107_204_Open_Image.style.display='inline'; Codehighlighter1_107_204_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_107_204_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_107_204_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">)<br /><img id="Codehighlighter1_120_202_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_202_Open_Text.style.display='none'; Codehighlighter1_120_202_Closed_Image.style.display='inline'; Codehighlighter1_120_202_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_120_202_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_120_202_Closed_Text.style.display='none'; Codehighlighter1_120_202_Open_Image.style.display='inline'; Codehighlighter1_120_202_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_120_202_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_120_202_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">&amp;value&nbsp;=&nbsp;%x,&nbsp;value&nbsp;=&nbsp;%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">&amp;</span><span style="color: #000000">value,value);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="color: #000000">++</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()<br /><img id="Codehighlighter1_218_314_Open_Image" onclick="this.style.display='none'; Codehighlighter1_218_314_Open_Text.style.display='none'; Codehighlighter1_218_314_Closed_Image.style.display='inline'; Codehighlighter1_218_314_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_218_314_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_218_314_Closed_Text.style.display='none'; Codehighlighter1_218_314_Open_Image.style.display='inline'; Codehighlighter1_218_314_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_218_314_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_218_314_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;_beginthread(print,</span><span style="color: #000000">0</span><span style="color: #000000">,NULL);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;_beginthread(print,</span><span style="color: #000000">0</span><span style="color: #000000">,NULL);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span></div>
<p>关于'_beginthread' : undeclared identifier的解决方法：<br /><font color="#000000" face="Verdana"><span style="font-family: Arial; ">Project--&gt;Settings--&gt;C/C ，在Category下拉列表里选择Code Generation，会看到Use run-time library下拉列表，如果你当前是debug模式，选择Debug Multithreaded，如果选择Multithreaded，会出现unresolved external symbol __CrtDbgReport这种编译错误，另外不需要在Link里包含LIBCMT.LIB这个库文件</span></font><span style="font-family: Arial; ">。</span><br /><br /><br /></p>
<p>&nbsp;</p><img src ="http://www.cppblog.com/sunrise/aggbug/186657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunrise/" target="_blank">SunRise_at</a> 2012-08-08 15:34 <a href="http://www.cppblog.com/sunrise/archive/2012/08/08/186657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>