大家看看下面這個程序,一共有幾個STA套間?

大家看看下面這個程序,一共有幾個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個線程是否創建了1000STA,這1000STA之間是否有關係?是否也創建了1000STA對象。

3)這裏的消息循環能否保證文件讀寫部分的安全性,在我的機器上,程序執行,在c:/123.txt中產生了1000This is a test!數據,似乎一切正常。那麼好像只有1STA套間,所有的文件寫操作好像通過消息循環同步了。

 

希望大家能指點指點,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章