现在的位置: 首页 > 综合 > 正文

大家看看下面这个程序,一共有几个STA套间?

2018年04月27日 ⁄ 综合 ⁄ 共 1801字 ⁄ 字号 评论关闭

大家看看下面这个程序,一共有几个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套间,所有的文件写操作好像通过消息循环同步了。

 

希望大家能指点指点,谢谢!

抱歉!评论已关闭.