ich habe ein kleines Problem mit der Funktion CancelIo.
In meinem Programm habe ich eine Task der ueber die Funktion Read die Pins 123 des Ports0 vom IOW24 einliest. Da ich keine Timeout habe blockiert der Task bis sich was am Eingang aendert. Der MainTask macht was anderes, und ruft am ende CancelIO(handle, 0), damit der andere Task weitermacht. CancelIo gibt true zurueck, aber der andere Task haeng immer noch. Das Programm habe ich mit c++.net geschrieben, das verhalten ist unter C# das gleiche. Was mache ich falsch?
Sdk & LIB Version 1.4
Der Code ist nicht schoen
Code: Select all
#include "stdafx.h"
#include "time.h"
#include "iowkit.h"
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;
public __gc class ThreadExample
{
public:
static IOWKIT_HANDLE iow;
static void ThreadProc()
{
for (int i = 0; i < 15; i++)
{
Console::Write("ThreadReadIOWPins: ");
Console::WriteLine(i);
IOWKIT24_IO_REPORT rep;
rep.ReportID = 0x0;
rep.Value = 0x00;
IowKitRead(iow, IOW_PIPE_IO_PINS, (PCHAR) &rep, IOWKIT24_IO_REPORT_SIZE);
Console::Write("ThreadReadIOWPins: Readsomething Port0:");
Console::WriteLine(rep.Bytes[0] & 0x0e);
}
}
static void init(){
WCHAR sn[9];
IOWKIT24_IO_REPORT rep;
iow = IowKitOpenDevice();
IowKitGetSerialNumber(iow, sn);
printf("S/N \"%ws\"\n", sn);
//using only Port0 pins 123 for input
rep.Value=0x000e;
IowKitWrite(iow, IOW_PIPE_IO_PINS, (PCHAR) &rep, IOWKIT24_IO_REPORT_SIZE);
}
static int startThread()
{
BOOLEAN ret =false;
init();
Console::WriteLine(S"Main thread: Start a second thread.");
Thread *oThread = new Thread(new ThreadStart(0, ThreadProc));
oThread->Start();
// do was zzzzzzZZZZZzzzzz
Thread::Sleep(10000);
ret =IowKitCancelIo(iow, IOW_PIPE_IO_PINS);
Console::Write(S"Main thread: CancelIo: ");
Console::WriteLine(ret);
Thread::Sleep(1000);
Console::ReadLine();
return 0;
}
};
int main(int argc, char* argv[])
{
ThreadExample::startThread();
return 0;
}
Ausgabe:
Main thread: Start a second thread.
ThreadReadIOWPins: 0
ThreadReadIOWPins: Readsomething Port0:0
ThreadReadIOWPins: 1
ThreadReadIOWPins: Readsomething Port0:14
ThreadReadIOWPins: 2
Main thread: CancelIo: 1