|
oops.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Nish [BusterBoy] wrote:
You need to use thread synchronization objects.
I suggest a critical section here
What is it? Do you have any example?
Thanks!!!!
|
|
|
|
|
ChiYung wrote:
What is it? Do you have any example?
You can use the CCriticalSection class.
It has only two member functions you'll need to use.
Create a CCriticalSection object for your app.
Now call m_critsectionobject.Lock() to gain access to the section. Put this as the first line of the array accessing function. Now when other threads call this function, the Lock() will block till the first thread calls Unkock()
Eg:-
void function(...)
{
m_critsectionobject.Lock();
//do your stuff here
m_critsectionobject.Unlock();
}
Now you can safely call function() from multiple threads without fear of two threads accessing the array at the same time.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
So, in this case, I can do it in this way: (example.....just algorithm....correct me if i am wrong)
This function will be called inside the thread function:
bool function (int x, CString InputString)
{
//can have others stuff here
m_critsectionobject.Lock();
If DBObject[x]= "free"
return true; //lock granted and thread can change DBObject[x] = InputString
Else, return false; //lock not grant and thread need to wait until DBObject[x]="free"
m_critsectionobject.Unlock();
//can have others stuff here
}
Question: If Thread A and B are trying to access the above "Critical section" code, the program will "automatically" create a "QUEUE", so that thread A and B can "line-up" to access this section??
Anyway..........THANK YOU VERY MUCH!!!!!!!!!!!!!!!!!!!!!!!!!!!
You are my angel!!!!!!!!!!!!!!!
|
|
|
|
|
ChiYung wrote:
Question: If Thread A and B are trying to access the above "Critical section" code, the program will "automatically" create a "QUEUE", so that thread A and B can "line-up" to access this section??
Yes. A and B will NOT access the function in parallel. B will wait till A has called Unlock().
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
You are so smart
You gave me a big hands!!!!
Thanks!!!!!!
|
|
|
|
|
I have a 3rd party Win32 DLL (a PGP wrapper) that I need to call from VC++. All I have is the DLL and a VB .BAS file that outlines the functions declarations as VB would call them.
I'm new to working with Win32 DLLs without an accompanying SDK kit. Can I set up the _stdcall(s) (using the VB code as a guide) or will need a .def or .h file from the DLL?
TIA
|
|
|
|
|
You'll need a header file for the function prototypes, huh? Otherwise it won't compile
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Nish,
Thanks for your quick response.
I have the function prototypes via the VB .BAS file. Can I use those as a guide for the .h prototypes?
Thanks for your help.
|
|
|
|
|
Well even if you have a header file, you'd then need a lib file to link it with. Since you dont have that either, there is no point in making a header file based on the bas file.
Tell you what, dynamically load the DLL and make calls to it. That was the good old fashioned way I guess
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
That might be the way to go.
Anything I should be aware of if I go that route. (possibly some examples...)
Thanks
|
|
|
|
|
How can I lock a ComboBox from user input (typing). I just want a drop down list (i can use listbox).
Thx
XP
|
|
|
|
|
In the resource editor take Properties-Styles Tab and then set the Type to "Drop List". By default it will be "Dropdown". Now the editable box is replaced with a static one.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Can I do this dynamically too?
|
|
|
|
|
Anonymous wrote:
Can I do this dynamically too?
I am not sure about that. Some styles cannot be changed at run time. But try setting the CBS_DROPDOWNLIST style using ModifyStyle
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Anonymous wrote:
Can I do this dynamically too?
I just tried this out :-
ModifyStyle(CBS_DROPDOWN,CBS_DROPDOWNLIST);
Didn't work
Nish
p.s. Perhaps there are other ways available. But I am not too sure now.
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Check out this nifty little control.
And if words were wisdom, I'd be talking even more. The Offspring, I Choose
|
|
|
|
|
This is not realy a programming questin... but people can't connect to my socket apps.... 'm using WinMe and I have a mini network at home here...
------------------------------------
Rickard Andersson, Suza Computing
ICQ#: 50302279
I'm from the winter country SWEDEN!
------------------------------------
|
|
|
|
|
Is your sockets app running on a machine with an IP that is accesible from outside?
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Hi!
Can you use a submenu of your dlg's main menu(like edit or file) as a popup menu too, using TrackPopUpmenu()? If so, will the command and updatecommand messages be handled automatically?
NC
|
|
|
|
|
NC wrote:
Can you use a submenu of your dlg's main menu(like edit or file) as a popup menu too, using TrackPopUpmenu()? If so, will the command and updatecommand messages be handled automatically?
Yes you can use a sub menu. The correct handlers will get called too.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Hi!
Thanks for replying. The command msg handler is getting called, but not the Update_UI.. msg handler. Can you think af any reasons why?
Thanks so much,
NC
|
|
|
|
|
I just downloaded some sourcecode from Internet and found this source code requires tlogstg.h, dose anyone know which SDK I should install to have this header file? TIA
|
|
|
|
|
Its part of IE 6.0
I copied this from a page in MSDN.
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/libraries/ie6_lib/default.asp
Here is the insert, but you'll need the lib and .dll to go with it.
I got this information by searching for tlogstg on the msdn website. Look there for more info.
[code]
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1999-2000.
//
// File: Tlogstg.idl
//
// Contents: TravelLog public interfaces
//
// Classes:
//
// Functions:
//
// History: 10-DEC-99 Sifrim (Silviu Ifrim) - created
//
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// tlogstg.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// (C) Copyright 1999-2000 Microsoft Corporation. All Rights Reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// ITravelLogStg Interface.")
cpp_quote("")
cpp_quote("#define SID_STravelLogCursor IID_ITravelLogStg ")
import "objidl.idl";
import "oleidl.idl";
// ITravelLogEntry
[
object,
uuid(7EBFDD87-AD18-11d3-A4C5-00C04F72D6B8), //IID_ITravelLogEntry
helpstring("ITravelLogEntry interface"),
local
]
interface ITravelLogEntry : IUnknown
{
[helpstring("Get page title"), helpcontext(0x0000)]
HRESULT GetTitle([out] LPOLESTR *ppszTitle);
[helpstring("Get URL"), helpcontext(0x0000)]
HRESULT GetURL([out] LPOLESTR *ppszURL);
};
//IEnumTravelLogEntry
[
object,
uuid(7EBFDD85-AD18-11d3-A4C5-00C04F72D6B8), //IID_IEnumTravelLogEntry
helpstring("IEnumTravelLogEntry interface"),
helpcontext(0x0000),
local,
]
interface IEnumTravelLogEntry : IUnknown
{
[helpstring("Get the next items in the enumeration sequence"), helpcontext(0x0000)]
HRESULT Next(
[in] ULONG cElt,
[out,
size_is(cElt),
length_is(*pcEltFetched)] ITravelLogEntry **rgElt,
[out] ULONG* pcEltFetched);
[helpstring("Skip over the next cElt elements"), helpcontext(0x0000)]
HRESULT Skip(
[in] ULONG cElt);
[helpstring("Reset the enumeration sequence"), helpcontext(0x0000)]
HRESULT Reset(void);
[helpstring("Creates a copy of the current state of enumeration"), helpcontext(0x0000)]
HRESULT Clone(
[out] IEnumTravelLogEntry **ppEnum);
};
[
uuid(7EBFDD80-AD18-11d3-A4C5-00C04F72D6B8), // IID_ITravelLogStg
object,
pointer_default(unique),
local,
]
interface ITravelLogStg : IUnknown
{
// care on these, they should match TLMENUF_xxx
enum
{
TLEF_RELATIVE_INCLUDE_CURRENT = 0x00000001,
TLEF_RELATIVE_BACK = 0x00000010,
TLEF_RELATIVE_FORE = 0x00000020,
TLEF_INCLUDE_UNINVOKEABLE = 0x00000040,
TLEF_ABSOLUTE = 0x00000031,
};
typedef DWORD TLENUMF;
[helpstring("Insert a dummy entry in the travel log"), helpcontext(0x0000)]
HRESULT CreateEntry(
[in] LPCOLESTR pszUrl,
[in] LPCOLESTR pszTitle,
[in] ITravelLogEntry *ptleRelativeTo,
[in] BOOL fPrepend,
[out] ITravelLogEntry **pptle);
[helpstring("Navigate to an entry"), helpcontext(0x0000)]
HRESULT TravelTo(
[in] ITravelLogEntry *ptle);
[helpstring("Create enumerator for travel log entries"), helpcontext(0x0000)]
HRESULT EnumEntries(
[in] TLENUMF flags,
[out] IEnumTravelLogEntry **ppenum);
[helpstring("Search for all entries with given URL"), helpcontext(0x0000)]
HRESULT FindEntries(
[in] TLENUMF flags,
[in] LPCOLESTR pszUrl,
[out] IEnumTravelLogEntry **ppenum);
[helpstring("Number of entries in the travel log"), helpcontext(0x0000)]
HRESULT GetCount(
[in] TLENUMF flags,
[out] DWORD *pcEntries);
[helpstring("Delete from travel log"), helpcontext(0x0000)]
HRESULT RemoveEntry(
[in] ITravelLogEntry *ptle);
[helpstring("Get entry from the travel log"), helpcontext(0x0000)]
HRESULT GetRelativeEntry(
[in] int iOffset,
[out] ITravelLogEntry **ptle);
};
[/ccode]
Good Luck,
Bill
|
|
|
|
|
Hi Everyone,
I handle/trap the Up-Arrow key press in my CView class. How do I pass along this message so that some of the other classes are also aware that the Up-Arrow key has been pressed? For example I want both the CView and my data grid class to handle this message.
Any help is greatly appreciated.
Thanks,
Al
|
|
|
|