大家看看下面这个程序,一共有几个STA套间?
来源:互联网 发布:mysql 查询日均访问量 编辑:程序博客网 时间:2024/05/01 05:28
大家看看下面这个程序,一共有几个STA套间?
最近一直在看组件的多线程模型这一块的内容,感觉甚为模糊。
源代码
大家帮忙分析下我的这个程序,看看共有几个套间。
1、组件程序我的组件是简单的文件操作,写入一串字符串“This is a test!”到c:/123.txt中,大家先要创建c:/123.txt文件。(组件的线程模型为STA,非主STA) 代码如下:
STDMETHODIMP CTheMath::FileWrite(LPCTSTR FileName, int i)
{
DWORD WriteCount;
HANDLE hr;
hr = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer(hr, 0, NULL, FILE_END);
WriteFile(hr, "This is a test!", 17, &WriteCount, NULL);
CloseHandle(hr);
return S_OK;
}
2、调用组件的win32控制台应用程序,一共创建了10个线程,同时调用组件的FileWrite接口函数,代码如下:
DWORD WINAPI ExecProc(void *p)
{
CoInitializeEx(0, COINIT_APARTMENTTHREADED);
ITheMath *ptrMath;
HRESULT hr = CoCreateInstance(CLSID_TheMath,
NULL,
CLSCTX_SERVER,
IID_ITheMath,
(void **)&ptrMath);
if FAILED(hr)
{
cout<<"Get ptrMath error!"<<endl;
return hr;
}
cout<<"Now Begin to create file!"<<endl;
ptrMath->FileWrite(_T("c://123.txt"));
ptrMath->Release();
CoUninitialize();
return(hr);
}
int _tmain(int argc, _TCHAR* argv[])
{
int i;
HANDLE hr;
DWORD ThreadID;
for (i=0; i<1000; i++)
{
hr = CreateThread(NULL, 0, ExecProc, &i, 0, &ThreadID);
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/*
for (i=0; i<1; i++)
{
hr = CreateThread(NULL, 0, ExecProc, NULL, 0, &ThreadID);
ResumeThread(hr);
}
*/
return 0;
}
1)大家帮忙看看这个程序一共创建了多少个STA套间,每个STA套间之间是否有关系。
2)这1000个线程是否创建了1000个STA,这1000个STA之间是否有关系?是否也创建了1000个STA对象。
3)这里的消息循环能否保证文件读写部分的安全性,在我的机器上,程序执行,在c:/123.txt中产生了1000条This is a test!数据,似乎一切正常。那么好像只有1个STA套间,所有的文件写操作好像通过消息循环同步了。
希望大家能指点指点,谢谢!
- 大家看看下面这个程序,一共有几个STA套间?
- 大家看看下面这个程序会有什么结果
- 大家帮我看看这个程序
- 【分享】几个高仿安卓程序,大家可以看看
- 大家帮我看看这个php语句有什么问题
- 有时间看看这个
- 请帮我看看这个程序有啥问题?
- 这个程序与下面的有什么区别?
- 《笑傲江湖》一共有几个版本? -- 影评
- 大家帮看看这个代码最后一行有什么错吗?
- 大家帮忙看看下面的代码
- 刚刚接触C 好多都不懂 大家帮忙看看 这个程序错哪了
- 请大家帮我看看,我这个程序里的错误,谢谢
- 大家帮忙看看 这个js怎么写?
- 给大家看看这个 silverlight电子钢琴
- 给大家看看这个 超炫翻页
- 大家看看写这个asp代码了
- 一些很有难度的.net面试题,请大家看看能做出几个
- windows下nutch初探
- Rational ClearQuest使用手册(PDF)
- WinXP SP2 USER32.DLL CallWindowProc(...)
- 进入完全Linux状态
- 用MS Windows 字体美化 Ubuntu(6.06)
- 大家看看下面这个程序,一共有几个STA套间?
- 2006年流行的10句名言(转贴)[好玩]
- 实现动态建立DataList模版
- 不能再这样懒惰下去了。
- J2ee缩写名词解释
- SQL中碰到的问题
- 品牌手机型号完全揭密(转贴)[分品牌分系列介绍]
- eclipse SWT progressbar 进度条
- 在Eclipse上使用XFire开发WebService(转载-常青的专栏)