大家看看下面这个程序,一共有几个STA套间?
2006-8-1
最近一直在看组件的多线程模型这一块的内容,感觉甚为模糊。
大家帮忙分析下我的这个程序,看看共有几个套间。
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套间,所有的文件写操作好像通过消息循环同步了。
希望大家能指点指点,谢谢!