|
I am doin the following...
class ThreadTest
{
public:
ThreadTest();
void end();
DWORD WINAPI Write_data(LPVOID);
DWORD ThreadID;
void run();
private:
HANDLE hThread;
bool keepRunning;
};
ThreadTest::ThreadTest()
{
keepRunning = true;
}
void ThreadTest::run()
{
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Write_data,NULL,0,&ThreadID);
}
void ThreadTest::end()
{
keepRunning = false;
}
DWORD WINAPI ThreadTest::Write_data(LPVOID lpParam)
{
while(keepRunning)
{
printf("I'm a thread running");
Sleep(1000);
}
return 0;
}
void main()
{
ThreadTest *t = new ThreadTest();
t->run();
Sleep(10000);
t->end();
}
On compiling I get...
error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type
Please help me out with this....THANKS
|
|
|
|
|
The function you pass to the CreateThread function can't be a member function of a class (the prototype is different). So, either use a non-member function or a static function.
In any case, you won't be able to access the non-static member variables. To solve this problem, pass the this pointer in the lpParameter parameter of CreateThread. It will be passed to your function and you'll be able to cast it back to your class pointer there and call a public method from there.
|
|
|
|
|
By the way, instead of using sleep, you could be much more efficient when you want to stop the thread if you use events (using CreateEvent function). When you want to stop your thread, you can signal the event. In your thread function, you can wait on the event instead of sleeping (and provide a timeout of 1000 msec) and check the return of the WaitForSingleObject to see if it is a timeout (in which case you continue your loop) or if the event has been signaled (in which case you exit your loop). This way, your thread will exit immediately and not wait until your Sleep finished.
|
|
|
|
|
I use ADO to connect to database. I connect successfully. But when I run my application with window there's an error :
Debug error :
This application has requested the Runtime to terminate it in an unusual way
Some one plz explain for me & give me a solution
|
|
|
|
|
capint wrote: This application has requested the Runtime to terminate it in an unusual way
Some one plz explain for me & give me a solution [Rose]
Please read the guidelines[^] and rephrase your question in accordance to it. With the information you've provided, I can only tell that there's "something wrong" with your code. That may not be a very helpful reply though.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
I mean that I connected successfully & I used it properly when I directly click on the application file. It just doesn't do well when start with window. Here is a part of my code. Plz help me
iSize = 0;
DateTimeNote Temp;
bool bFlag = true;
Open("Provider=Microsoft.Jet.OLEDB.4.0; \
Data Source=DateNote.mdb");
CString sql;
variant_t vNull;
variant_t TheValue;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
CString StrResult;
CString StrSql;
CString StrDateTime;
CString StrDateTimeTemp;
StrDateTime.Format(_T("%i/%i/%i"),DateTime.GetMonth(),DateTime.GetDay(),DateTime.GetYear());
StrSql.Format(_T("SELECT * FROM DATETIMENOTE WHERE NGAY = '%s'"), StrDateTime);
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->PutRefActiveConnection(m_pConnection);
m_pRecordset->Open(_variant_t(StrSql), vNull, adOpenForwardOnly, adLockOptimistic, adCmdText);
while (!m_pRecordset->GetEndOfFile())
{
TheValue = m_pRecordset->GetCollect("GIO");
if(TheValue.vt != VT_NULL)
{
StrResult = (char *)_bstr_t(TheValue);
StrDateTimeTemp = StrDateTime + _T(" ") + StrResult;
Temp.DateTime.ParseDateTime(StrDateTimeTemp, LOCALE_NOUSEROVERRIDE, LANG_USER_DEFAULT);
}
TheValue = m_pRecordset->GetCollect("NOTE");
if(TheValue.vt != VT_NULL)
{
StrResult = (char *)_bstr_t(TheValue);
Temp.Note = StrResult;
}
pTemp[iSize] = Temp;
iSize ++;
m_pRecordset->MoveNext();
}
|
|
|
|
|
Did you try debugging the application? Where is the crash happening?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
How can I debug the application ? It worked properly when I debug in VC. When window starts, it just announces a message
|
|
|
|
|
capint wrote: How can I debug the application ?
By setting a breakpoint and starting the debugger.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Can you explain more ? Where to put the breakpoint & how to start the debugger ? I mean with the application (file with the extension .exe)
|
|
|
|
|
You can also print status messages using OutputDebugString[^] and use an external debugger like DebugView[^]to view those messages. Find out where exactly your application is crashing and start investigating that portion of code.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
I think his application is started as a service when windows starts, so it's a bit too late to open VC and attach the debugger
|
|
|
|
|
May be. But I couldn't make out anything from what he said.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
The hint is in the title and in his previous message
|
|
|
|
|
window != Windows for me. I actually thought he is talking about some window. Or may be that I'm not smart enough.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Naaah, it's just that you didn't use your CPMRU properly
|
|
|
|
|
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
So have you ever tried to connect to database through ADO and make it run with window ? Plz give me some code examples
|
|
|
|
|
I'm sorry if my question is so vague. I meant Windows I put my application path in registry (create a value in ...\Run) and I repeat my application works well when I debug in VC. It just doesn't work when Windows starts
|
|
|
|
|
Have you seen this?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I've searched for many hours but I found no result ... Some one has mentioned that problem but they didn't solve it ...
|
|
|
|
|
Have you tried the hotfix from Microsoft?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I don't know I will wander some IT forum to ask if anyone has the same problem. Thanks for all of your answers
|
|
|
|
|
capint wrote: I don't know
How can you not know if you've installed a hotfix or not?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Don't get me started. He may not know. But, you should know it. Just get your CPMRU started.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|